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

MySQL łączy się z klauzulą ​​where

Musisz umieścić go w join klauzula, a nie where :

SELECT *
FROM categories
LEFT JOIN user_category_subscriptions ON 
    user_category_subscriptions.category_id = categories.category_id
    and user_category_subscriptions.user_id =1

Zobacz, z inner join , umieszczając klauzulę w join lub where jest równoważne. Jednak z outer join , są one bardzo różne.

Jako join warunek, określ zestaw wierszy, który będzie dołączany do tabeli. Oznacza to, że oblicza user_id = 1 najpierw i pobiera podzbiór user_category_subscriptions z user_id z 1 dołączyć do wszystkich wierszy w categories . To da ci wszystkie wiersze w categories , podczas gdy tylko categories że ten konkretny użytkownik zasubskrybował, będzie miał wszelkie informacje w user_category_subscriptions kolumny. Oczywiście wszystkie inne categories zostanie wypełnione null w user_category_subscriptions kolumny.

I odwrotnie, where klauzula łączy, a wtedy zmniejsza zestaw wierszy. W ten sposób wykonuje wszystkie połączenia, a następnie eliminuje wszystkie wiersze, w których user_id nie równa się 1 . Pozostaje Ci niewydajny sposób na uzyskanie inner join .

Mam nadzieję, że to pomoże!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolumna zmiany nazwy MySQL

  2. Jak wykonać rozmyte dopasowanie nazw firm w MYSQL z PHP w celu automatycznego uzupełniania?

  3. Brak mapowania dialektu dla typu JDBC:1111

  4. Migracja z Oracle do MySQL

  5. Zautomatyzuj wdrażanie swojego klastra MySQL lub Postgres z kopii zapasowej