Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum INNER JOIN nicht gleich (!=) für immer hängen bleibt

Nehmen wir an, Ihr erster INNER JOIN gibt 75 % der 1.000.000 Zeilen in table1 zurück . Die zweite Abfrage gibt die 250.000 anderen Zeilen nicht zurück, wie Sie denken. Stattdessen wird versucht, ein kartesisches Produkt zu erstellen und die 750.000 übereinstimmenden Zeilen zu entfernen. Daher wird versucht, 6.000.000 × 1.000.000-750.000 Zeilen zurückzugeben. Das ist eine prall gefüllte 6×10-Zeilen-Ergebnismenge.

Wahrscheinlich möchten Sie dies:

SELECT * FROM table1
LEFT JOIN table2 ON table2.number = table1.number
WHERE table2.number IS NULL

Dies gibt Zeilen in table1 zurück nicht vorhanden in table2 .

Sie könnten auch an FULL OUTER JOIN interessiert sein :

SELECT * FROM table1
FULL OUTER JOIN table2 ON table2.number = table1.number
WHERE table1.number IS NULL AND table2.number IS NULL

Dies gibt Zeilen in beiden Tabellen zurück, die keine Übereinstimmung in der anderen Tabelle haben.