Ich habe 3 Tabellen in MySQL und ich muss alle Instanzen finden, wo ein Benutzer kein bestimmtes Widget hat.MySQL Join 3 Tabellen und finde "fehlende" Zeilen in einer Tabelle
Beispiel:
Users
tenant_id user_id user_name
1 1 Bob
1 2 Fred
1 3 John
1 4 Tom
Widgets
tenant_id widget_id widget_name
1 1 Red
1 2 Blue
1 3 Green
1 4 Black
Usage
tenant_id user_id widget_id
1 1 1
1 1 2
1 1 4
1 2 2
1 2 3
1 2 4
1 3 1
1 3 2
1 3 3
1 3 4
1 4 1
1 4 2
1 4 3
Missing in table three are:
user_name widget_name
Bob Green
Fred Red
Tom Black
Die Abfrage ich zu verwenden Ich versuche ist:
SELECT
user_name, widget_name
FROM
users left join widgets on users.tenant_id=widgets.tenant_id
WHERE
NOT EXISTS (
SELECT 1 FROM usage WHERE user_id = users.user_id AND widget_id = widgets.widget_id
) and users.tenant_id=1
Wenn die Abfrage abgeschlossen ist es eine riesige Liste von Benutzernamen und Widget-Namen zurück bringt aber viele hundert mehr, als ich erwarten von.
Ich bin mir nicht sicher, ob der Join falsch ist oder ob ich eine Gruppierung des Ergebnisses vornehmen muss.
Welches Ergebnis bekommen Sie? Bitte fügen Sie das in Ihre Antwort ein oder richten Sie eine SQL Fiddle ein. –