Comment puis-je sélectionner uniquement les magasins qui n'ont pas de client 5
?
StoreId ClientId
------- ---------
1 4
1 5
2 5
2 6
2 7
3 8
J'essaie quelque chose comme ça:
SELECT SC.StoreId FROM StoreClients
INNER JOIN StoreClients SC
ON StoreClients.StoreId = SC.StoreId
WHERE SC.ClientId = 5
GROUP BY StoreClients.StoreId
Cela semble me procurer tous les magasins qui ont ce client, mais je ne peux pas faire le contraire parce que si je fais <> 5
Je reçois toujours le magasin 1
Et 2
Que je ne fais pas veux pas.
J'essaie essentiellement d'utiliser ce résultat dans la clause EXISTS IN
D'une autre requête
Une manière:
SELECT DISTINCT sc.StoreId
FROM StoreClients sc
WHERE NOT EXISTS(
SELECT * FROM StoreClients sc2
WHERE sc2.StoreId = sc.StoreId AND sc2.ClientId = 5)
SELECT SC.StoreId
FROM StoreClients SC
WHERE SC.StoreId NOT IN (SELECT StoreId FROM StoreClients WHERE ClientId = 5)
De cette façon, ni JOIN
ni GROUP BY
est nécessaire.
SELECT DISTINCT a.StoreID
FROM tableName a
LEFT JOIN tableName b
ON a.StoreID = b.StoreID AND b.ClientID = 5
WHERE b.StoreID IS NULL
SORTIE
╔═════════╗
║ STOREID ║
╠═════════╣
║ 3 ║
╚═════════╝
SELECT StoreId
FROM StoreClients
WHERE StoreId NOT IN (
SELECT StoreId
FROM StoreClients
Where ClientId=5
)
Vous pouvez utiliser EXCEPT
syntaxe , par exemple:
SELECT var FROM table1
EXCEPT
SELECT var FROM table2