sql >> Database >  >> RDS >> Mysql

Waarom INNER JOIN niet gelijk is aan (!=) voor altijd hangen

Laten we zeggen je eerste INNER JOIN retourneert 75% van de 1.000.000 rijen in table1 . De tweede query retourneert niet de 250.000 andere rijen zoals u denkt. In plaats daarvan probeert het een Cartesiaans product te maken en de 750.000 overeenkomende rijen te verwijderen. Het probeert dus 6.000.000 × 1.000.000-750.000 rijen te retourneren. Dat is een uitpuilende resultatenset van 6×10 rijen.

Dit wil je waarschijnlijk:

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

Dit retourneert rijen in table1 niet aanwezig in table2 .

Mogelijk ben je ook geïnteresseerd in 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

Dit retourneert rijen in beide tabellen die niet overeenkomen met de andere tafel.



  1. Ongeldig parametertype (numpy.int64) bij het invoegen van rijen met executemany()

  2. hoe sqlite te synchroniseren met Mysql

  3. db van overbodige gegevens opschonen

  4. Hoe TIME() werkt in MariaDB