2012-10-28 3 views
7

Pour simplifier, j'ai deux tables liées avec un à plusieurs en utilisant une clé étrangère, par exemple:Sélection des clés primaires qui ne sont pas les clés étrangères dans une autre table

Users table: 
id 
name 

Actions table: 
id 
user_id 

un utilisateur peut avoir de nombreuses actions ou non . J'ai besoin d'un select SQL qui renvoie les ID utilisateurs qui n'ont pas de valeur user_id dans la table des actions.

Users Table: 
id  name 
1  John 
2  Smith 
3  Alice 

Actions Table: 
id  user_id 
1  3 
2  1 

donc j'ai besoin d'une requête SQL qui retourne l'ID utilisateur 2 (Smith) parce que les valeurs de clé étrangère ne comprennent pas l'id 2

J'ai essayé l'instruction SQL suivante, mais il retourne tous les utilisateurs ids :

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

Répondre

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

Il n'a renvoyé aucun résultat. – SaidbakR

+0

Ouais, a eu une faute de frappe dans ma requête. – bobwienholt

4

Version optimisée serait:

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

il a renvoyé tous les utilisateurs. – SaidbakR

+0

vous avez raison j'avais un type de miss correct est: ON a.user_id = u.id – ChaosClown

Questions connexes