Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego INNER JOIN nie jest równy (!=) wisi na zawsze

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyzwalacze MySQL i SUM()

  2. MySQL - Jak ZAMÓWIĆ WEDŁUG TRAFNOŚCI? Tabela INNODB

  3. Zapętlanie prostokątów svg z bazy danych

  4. Jak stworzyć bazę danych MySQL i ustawić uprawnienia

  5. Jak ustawić domyślną wartość dla kolumny MySQL Datetime?