Ich habe zwei Tabellen, an denen ich teilnehmen möchte.
Ich möchte alle Kategorien in der Kategorietabelle und auch alle Kategorien, die von einem Benutzer in der Tabelle category_subscriptions abonniert wurden.
Im Wesentlichen ist dies meine bisherige Frage:
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
Dies funktioniert gut, aber ich möchte am Ende der Abfrage eine where-Klausel hinzufügen, die es dann im Wesentlichen zu einem inneren / äqui-Join macht.
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
WHERE user_category_subscriptions.user_id = 1
Wie erhalte ich alle Kategorien sowie alle Kategorien, die von einem bestimmten Benutzer mit nur einer Abfrage abonniert wurden?
category_id ist ein Schlüssel sowohl in der Kategorietabelle als auch in user_category_subscriptions. user_id befindet sich in der Tabelle user_category_subscriptions.
Vielen Dank
mysql
join
where-clause
mmundiff
quelle
quelle
Antworten:
Sie müssen es in die
join
Klausel einfügen, nicht in diewhere
:Siehe mit einem
inner join
, eine Klausel in dasjoin
oder das zu setzenwhere
ist gleichwertig. Mit einemouter join
sind sie jedoch sehr unterschiedlich.Als
join
Bedingung geben Sie das Rowset an, das Sie der Tabelle hinzufügen möchten. Dies bedeutet, dass esuser_id = 1
zuerst ausgewertet wird und die Teilmenge vonuser_category_subscriptions
mit einemuser_id
von verwendet1
, um mit allen Zeilen in zu verbindencategories
. Dadurch erhalten Sie alle Zeilen incategories
, während nur die Zeilen , diecategories
dieser bestimmte Benutzer abonniert hat, Informationen in denuser_category_subscriptions
Spalten enthalten. Natürlich sind alle anderencategories
mit bevölkert werdennull
in denuser_category_subscriptions
Spalten.Umgekehrt führt eine
where
Klausel den Join aus und reduziert dann das Rowset. Dies führt also alle Verknüpfungen aus und eliminiert dann alle Zeilen, in denenuser_id
dies nicht gleich ist1
. Sie haben einen ineffizienten Weg, um einen zu bekommeninner join
.Hoffentlich hilft das!
quelle
A
undB
Tabelle? Können Sie Ihre Frage umformulieren?Versuche dies
quelle