Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL join com cláusula where


Você precisa colocá-lo no join cláusula, não o 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

Veja, com uma inner join , colocando uma cláusula no join ou o where é equivalente. No entanto, com uma outer join , eles são muito diferentes.

Como uma join condição, você especifica o conjunto de linhas que você unirá à tabela. Isso significa que ele avalia user_id = 1 primeiro e pega o subconjunto de user_category_subscriptions com um user_id de 1 para juntar-se a todas as linhas em categories . Isso lhe dará todas as linhas em categories , enquanto apenas as categories que esse usuário em particular se inscreveu terá qualquer informação no user_category_subscriptions colunas. Claro, todas as outras categories será preenchido com null em user_category_subscriptions colunas.

Por outro lado, um where cláusula faz a junção e então reduz o conjunto de linhas. Então, isso faz todas as junções e elimina todas as linhas em que user_id não é igual a 1 . Você ficou com uma maneira ineficiente de obter uma inner join .

Espero que isso ajude!