Zwei Tabellen vergleichen

Guten Tag,

ich habe ein problem mit MySQl.

Ich habe zwei Tabellen mit jeweils fast 4 Millionen Zeilen. In der Tabelle A gibt es eine Spalte kennzahl und in Tabelle B eine Spatke kennzahl_other.

Ich möchte nun in der Tabelle A auf die Spalte match ein Update machen und dort eine 1 eintagen, wenn die kennzahl und die kennzahl_other gleich ist! Da es sein kann, das in Tabelle B die kennzahl mehrmals vorkommt, möchte ich das die 1 dann immer um eins hochgesetzt wird. Somit habe ich dann in TABELLE A in der Spalte match die Anzahl der in Tabelle B befindlichen gleichen kennzahlen

Gruss

Lars

Hallo Lars

Versuche es einmal mit einem Subselect:

UPDATE Table1
 SET match = (SELECT count(1)
 FROM Table2
 WHERE Table2.kennzahl\_other = Table1.kennzahl)

Sicherlich nicht die performanteste Lösung, aber für eine einmalige Aktion sicher brauchbar. Performanter währe möglicherweise eine Lösung mit GROUP BY.

Gruss
Tschügge

Moin, Lars,

den Update schaffe ich nicht, aber immerhin einen Insert in
eine neue Tabelle, und das auch nur in 2 Schritten, weil mir das Ganze sonst zu komplex wird:

 INSERT INTO Tabelle\_C (kennzahl, match)
 ' Join Tabelle\_A und View 
 SELECT Zählen.kennzahl, Zählen.Anzahl
 FROM Zählen, Tabelle\_A
 ' Joinbedingung 
 WHERE Tabelle\_A.kennzahl=Zählen.kennzahl;

mit der View Zählen:

 SELECT kennzahl, Count(kennzahl) AS Anzahl
 ' Join Tabelle\_A und Tabelle\_B 
 FROM (SELECT kennzahl, kennzahl\_other
 FROM tabelle\_A, Tabelle\_B
 ' Joinbedingung 
 WHERE kennzahl=kennzahl\_other)
 ' Eindampfen
 GROUP BY kennzahl;

So geht es jedenfalls unter Access; beim Versuch, den Update entsprechend aufzubauen, liefert mein Access 2000 keine sinnvollen Werte zurück (nur Nullen). Ich scheitere daran, beim Update anzugeben, welche Sätze geändert werden sollen - beim Insert braucht’s diese Klausel ja nicht.

Gruß Ralf