sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor INNER JOIN ikke lige (!=) hænger for evigt

Lad os sige din første INNER JOIN returnerer 75 % af de 1.000.000 rækker i table1 . Den anden forespørgsel returnerer ikke de 250.000 andre rækker, som du tror. I stedet forsøger den at skabe et kartesisk produkt og fjerne de 750.000 matchende rækker. Den forsøger således at returnere 6.000.000×1.000.000-750.000 rækker. Det er et svulmende resultatsæt på 6×10 rækker.

Du vil sandsynligvis have dette:

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

Dette returnerer rækker i table1 ikke til stede i table2 .

Du er måske også interesseret i FULL OUTER JOIN :

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

Dette returnerer rækker i begge tabeller, der ikke matcher den anden tabel.



  1. Sender en række værdier til Oracle-proceduren til brug i WHERE IN-klausulen

  2. Hvad er forskellen mellem mysql.createConnection og mysql.createPool i Node.js MySQL-modul?

  3. Slet aldrig poster? God ide? Sædvanlig?

  4. Hvordan tilpasser man konfigurationsfilen for det officielle PostgreSQL Docker-billede?