如何只选择没有客户端的存储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
OUTPUT
╔═════════╗
║ STOREID ║
╠═════════╣
║ 3 ║
╚═════════╝
SELECT StoreId
FROM StoreClients
WHERE StoreId NOT IN (
SELECT StoreId
FROM StoreClients
Where ClientId=5
)
SQL小提琴
您可以使用EXCEPT
语法 ,例如:
SELECT var FROM table1
EXCEPT
SELECT var FROM table2
<> will surely give you all values not equal to 5.
如果你在表中的多个记录,它会给你所有除5.如果在另一方面,你只有一个,你会得到一个肯定。 给表模式,使人们可以正确地帮助你