Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi INNER JOIN n'est pas égal (!=) pendre pour toujours

Disons votre premier INNER JOIN renvoie 75 % des 1 000 000 lignes de table1 . La deuxième requête ne renvoie pas les 250 000 autres lignes comme vous le pensez. Au lieu de cela, il tente de créer un produit cartésien et de supprimer les 750 000 lignes correspondantes. Ainsi, il essaie de renvoyer 6 000 000 × 1 000 000-750 000 lignes. C'est un jeu de résultats bombé de 6 × 10 lignes.

Vous voulez probablement ceci :

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

Cela renvoie des lignes dans table1 non présent dans table2 .

Vous pourriez également être intéressé par 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

Cela renvoie les lignes des deux tables qui n'ont pas de correspondance dans l'autre table.