2012-10-28 6 views
7

Zur Vereinfachung keine Fremdschlüssel in einer anderen Tabelle hat, ich habe zwei mit einer zu vielen Fremdschlüssel verwendet wird, zum Beispiel im Zusammenhang Tabellen:Primärschlüssel auswählen, die

Users table: 
id 
name 

Actions table: 
id 
user_id 

ein Benutzer viele Aktionen haben kann oder nicht . Ich brauche eine SQL-Auswahl, die Benutzer-IDs zurückgibt, die keinen Benutzer-ID-Wert in der Aktionstabelle haben.

Users Table: 
id  name 
1  John 
2  Smith 
3  Alice 

Actions Table: 
id  user_id 
1  3 
2  1 

Also brauche ich eine SQL-Abfrage, die die Benutzer-ID 2 (Smith), weil die Fremdschlüsselwerte beinhalten nicht die id 2

Ich habe versucht, die folgende SQL gibt, aber es gibt alle Benutzer-IDs :

SELECT users.id from users left join actions on actions.user_id is null 

Antwort

11
select u.id 
from users u 
left outer join actions a on a.user_id = u.id 
where a.user_id is null 
2
SELECT u.id 
FROM users u 
LEFT JOIN actions a 
    ON a.user_id = u.id 
WHERE a.user_id IS NULL 
+0

Es ergab kein Ergebnis. – SaidbakR

+0

Ja, hatte einen Tippfehler in meiner Abfrage. – bobwienholt

4

optimierte Version wäre:

SELECT u.id 
FROM users u 
LEFT JOIN actions a 
ON a.user_id = u.id 
AND ISNULL(a.user_id) 
+0

gab es alle Benutzer zurück. – SaidbakR

+0

Sie haben Recht, ich hatte einen Fehlertyp korrekt ist: ON a.user_id = u.id – ChaosClown