Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL се присъединява с клауза where

Трябва да го поставите в join клауза, а не 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

Вижте, с inner join , поставяйки клауза в join или where е еквивалентен. Въпреки това, с outer join , те са много различни.

Като join условие, вие посочвате набора от редове, който ще присъедините към таблицата. Това означава, че оценява user_id = 1 първо и приема подмножеството от user_category_subscriptions с user_id от 1 за да се присъедините към всички редове в categories . Това ще ви даде всички редове в categories , докато само categories за които този конкретен потребител се е абонирал, ще има всякаква информация в user_category_subscriptions колони. Разбира се, всички останали categories ще бъде попълнен с null в user_category_subscriptions колони.

Обратно, where клауза извършва присъединяването, а след това намалява набора от редове. Така че, това прави всички присъединявания и след това елиминира всички редове, където user_id не е равно на 1 . Остава ви неефективен начин да получите inner join .

Дано това помогне!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кумулативна сума за набор от редове в mysql

  2. Вмъкнете няколко реда с подготвени изрази за PDO

  3. MySQL CAST срещу CONVERT

  4. Как да избегнем вмъкването на дублиращи се записи в MySQL

  5. Как работи операторът SOUNDS LIKE в MySQL