sql >> Databasteknik >  >> RDS >> Mysql

Varför INNER JOIN inte lika (!=) hänga för alltid

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.



  1. Spara facebook-id som int eller varchar?

  2. Spring Boot MySQL-databasinitieringsfel med lagrade procedurer

  3. Vad är det för fel med denna MySQL-sats:DECLARE @ID INT

  4. Postgres heltalsmatriser som parametrar?