如何仅选择没有客户端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
子句
答案 0 :(得分:22)
一种方式:
SELECT DISTINCT sc.StoreId
FROM StoreClients sc
WHERE NOT EXISTS(
SELECT * FROM StoreClients sc2
WHERE sc2.StoreId = sc.StoreId AND sc2.ClientId = 5)
答案 1 :(得分:12)
SELECT SC.StoreId
FROM StoreClients SC
WHERE SC.StoreId NOT IN (SELECT StoreId FROM StoreClients WHERE ClientId = 5)
这样,JOIN
和GROUP BY
都不是必需的。
答案 2 :(得分:9)
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 ║
╚═════════╝
答案 3 :(得分:7)
SELECT StoreId
FROM StoreClients
WHERE StoreId NOT IN (
SELECT StoreId
FROM StoreClients
Where ClientId=5
)
答案 4 :(得分:3)
您可以使用EXCEPT
syntax,例如:
SELECT var FROM table1
EXCEPT
SELECT var FROM table2
答案 5 :(得分:-1)
<> will surely give you all values not equal to 5.
如果你在表格中有多个记录,它将为你提供除5之外的所有记录。 如果另一方面你只有一个,你肯定会有一个。 提供表架构,以便人们可以正确地帮助您