sql >> Base de Datos >  >> RDS >> Mysql

MySQL se une con la cláusula where

Tienes que ponerlo en join cláusula, no el 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

Mira, con una inner join , poniendo una cláusula en join o el where es equivalente. Sin embargo, con una outer join , son muy diferentes.

Como join condición, especifica el conjunto de filas que se unirá a la tabla. Esto significa que evalúa user_id = 1 primero, y toma el subconjunto de user_category_subscriptions con un user_id de 1 para unirse a todas las filas en categories . Esto le dará todas las filas en categories , mientras que solo las categories que este usuario en particular se haya suscrito tendrá cualquier información en user_category_subscriptions columnas Por supuesto, todas las demás categories se completará con null en el user_category_subscriptions columnas.

Por el contrario, un where cláusula hace la unión, y luego reduce el conjunto de filas. Entonces, esto hace todas las uniones y luego elimina todas las filas donde user_id no es igual a 1 . Te queda una forma ineficiente de obtener una inner join .

¡Espero que esto ayude!