Powiedzmy, że Twoje pierwsze INNER JOIN
zwraca 75% z 1 000 000 wierszy w table1
. Drugie zapytanie nie zwraca 250 000 innych wierszy, jak myślisz. Zamiast tego próbuje utworzyć produkt kartezjański i usunąć 750 000 pasujących wierszy. W ten sposób próbuje zwrócić 6 000 000 × 1 000 000-750 000 wierszy. To wybrzuszony zestaw wyników 6×10 wierszy.
Prawdopodobnie tego chcesz:
SELECT * FROM table1
LEFT JOIN table2 ON table2.number = table1.number
WHERE table2.number IS NULL
Zwraca wiersze w table1
brak w table2
.
Możesz być również zainteresowany 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
Zwraca to wiersze w obu tabelach, które nie pasują do drugiej tabeli.