22

我如何只选择没有客户的商店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生病了,我仍然会得到 Store1并且2我不想要。

我基本上是在尝试在另一个查询的EXISTS IN子句中使用这个结果

4

6 回答 6

31

单程:

SELECT DISTINCT sc.StoreId
FROM StoreClients sc
WHERE NOT EXISTS(
    SELECT * FROM StoreClients sc2 
    WHERE sc2.StoreId = sc.StoreId AND sc2.ClientId = 5)
于 2013-03-13T15:12:14.680 回答
15
SELECT SC.StoreId 
FROM StoreClients SC
WHERE SC.StoreId NOT IN (SELECT StoreId FROM StoreClients WHERE ClientId = 5)

这样既没有JOIN也没有GROUP BY必要。

于 2013-03-13T15:12:43.323 回答
11
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 ║
╚═════════╝
于 2013-03-13T15:11:49.380 回答
7
SELECT StoreId
FROM StoreClients
WHERE StoreId NOT IN (
  SELECT StoreId
  FROM StoreClients
  Where ClientId=5
)

SQL小提琴

于 2013-03-13T15:12:23.507 回答
3

您可以使用EXCEPT语法,例如:

SELECT var FROM table1
EXCEPT
SELECT var FROM table2
于 2016-11-08T15:55:26.503 回答
-1

<>肯定会给你所有不等于 5 的值。如果你在表中有多个记录,它会给你除了 5 之外的所有值。另一方面,如果你只有一个,你肯定会得到一个。给出表模式,以便可以正确地帮助您

于 2013-03-13T15:17:52.970 回答