クライアント5
がないストアのみを選択するにはどうすればよいですか?
StoreId ClientId
------- ---------
1 4
1 5
2 5
2 6
2 7
3 8
私はこのようなことを試みています:
SELECT SC.StoreId FROM StoreClients
INNER JOIN StoreClients SC
ON StoreClients.StoreId = SC.StoreId
WHERE SC.ClientId = 5
GROUP BY StoreClients.StoreId
それはそのクライアントを持っているすべてのストアを取得するようですが、<> 5
を実行してもまだストア1
と2
を取得しないので、反対はできません。
私は基本的に別のクエリのEXISTS IN
句でこの結果を使用しようとしています
一方通行:
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)
この方法では、JOIN
もGROUP BY
必要です。
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
出力
╔═════════╗
║ STOREID ║
╠═════════╣
║ 3 ║
╚═════════╝
SELECT StoreId
FROM StoreClients
WHERE StoreId NOT IN (
SELECT StoreId
FROM StoreClients
Where ClientId=5
)
EXCEPT
構文 を使用できます。例:
SELECT var FROM table1
EXCEPT
SELECT var FROM table2