sql >> Databáze >  >> RDS >> Mysql

Proč se INNER JOIN nerovná (!=) visí navždy

Řekněme vaše první INNER JOIN vrátí 75 % z 1 000 000 řádků v table1 . Druhý dotaz nevrací 250 000 dalších řádků, jak si myslíte. Místo toho se pokusí vytvořit kartézský součin a odstranit 750 000 odpovídajících řádků. Snaží se tedy vrátit 6 000 000 × 1 000 000-750 000 řádků. To je vyboulená sada výsledků 6×10 řádků.

Pravděpodobně budete chtít toto:

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

To vrátí řádky v table1 není přítomen v table2 .

Také by vás mohlo zajímat 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

To vrátí řádky v obou tabulkách, které nemají shodu v druhé tabulce.



  1. Pomocí SQL JOIN a COUNT

  2. Jak funguje funkce Time() v SQLite

  3. ORA-27154 / ORA-27146

  4. Hodnota '0000-00-00' nemůže být reprezentována jako java.sql.Date