Låt oss säga din första INNER JOIN
returnerar 75 % av de 1 000 000 raderna i table1
. Den andra frågan returnerar inte de 250 000 andra raderna som du tror. Istället försöker den skapa en kartesisk produkt och ta bort de 750 000 matchande raderna. Därför försöker den returnera 6 000 000×1 000 000-750 000 rader. Det är en utbuktande resultatuppsättning på 6×10 rader.
Du vill förmodligen ha det här:
SELECT * FROM table1
LEFT JOIN table2 ON table2.number = table1.number
WHERE table2.number IS NULL
Detta returnerar rader i table1
finns inte i table2
.
Du kanske också är intresserad av 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
Detta returnerar rader i båda tabellerna som inte matchar den andra tabellen.