Eu tenho duas mesas em que quero entrar.
Desejo todas as categorias na tabela de categorias e também todas as categorias assinadas por um usuário na tabela category_subscriptions.
essencialmente, esta é a minha consulta até agora:
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
Isso funciona bem, no entanto, eu quero adicionar uma cláusula where no final da consulta, que basicamente a torna uma junção 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
Como obtenho todas as categorias e todas as categorias assinadas por um usuário específico usando apenas uma consulta?
category_id sendo uma chave na tabela de categorias e no user_category_subscriptions. user_id residente na tabela user_category_subscriptions.
obrigado
mysql
join
where-clause
mmundiff
fonte
fonte
Respostas:
Você precisa colocá-lo na
join
cláusula, não nowhere
:Veja, com um
inner join
, colocando uma cláusula nojoin
ou owhere
é equivalente. No entanto, com umouter join
, eles são muito diferentes.Como
join
condição, você especifica o conjunto de linhas que ingressará na tabela. Isso significa que ele avaliauser_id = 1
em primeiro lugar, e leva o subconjunto deuser_category_subscriptions
com umuser_id
de1
juntar-se a todas as linhascategories
. Isso fornecerá todas as linhascategories
, enquanto apenas ascategories
que este usuário específico se inscreveu terão informações nasuser_category_subscriptions
colunas. Obviamente, todos os outroscategories
serão preenchidosnull
nasuser_category_subscriptions
colunas.Por outro lado, uma
where
cláusula faz a juntar-se, e , em seguida, reduz o conjunto de linhas. Portanto, isso faz todas as junções e elimina todas as linhas ondeuser_id
não é igual1
. Você fica com uma maneira ineficiente de obter umainner join
.Espero que isso ajude!
fonte
A
eB
tabela? Você pode reformular sua pergunta?Tente isto
fonte