columns mysql join where-clause

columns - MySQL se une con where cláusula



select in select mysql (2)

Debe colocarlo en la cláusula join , no en 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

Ver, con una inner join , poner una cláusula en la join o where es equivalente. Sin embargo, con una outer join , son muy diferentes.

Como condición de join , especifique el conjunto de filas que se unirá a la tabla. Esto significa que primero evalúa user_id = 1 y toma el subconjunto de user_category_subscriptions 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 se ha suscrito este usuario particular tendrán información en las columnas de user_category_subscriptions . Por supuesto, todas las demás categories se user_category_subscriptions con null en las columnas de la categoría user_category_subscriptions .

Por el contrario, una cláusula where une, 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!

Tengo dos mesas a las que quiero unirme.

Quiero todas las categorías en la tabla de categorías y también todas las categorías suscritas por un usuario en la tabla de categoría_subscripciones.

esencialmente esta es mi consulta hasta el momento:

SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id

Esto funciona bien, sin embargo, quiero agregar una cláusula where al final de la consulta que esencialmente lo convierte en una unión interna / equi.

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

¿Cómo puedo obtener todas las categorías, así como todas las categorías suscritas por un usuario en particular con solo una consulta?

category_id es una clave en ambas categorías table y user_category_subscriptions. user_id que reside en la tabla user_category_subscriptions.

Gracias


Prueba esto

SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id WHERE user_category_subscriptions.user_id = 1 or user_category_subscriptions.user_id is null