如何在sql select中排除具有特定值的记录

时间:2013-03-13 15:09:42

标签: sql sql-server tsql exists

如何仅选择没有客户端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生病,我仍会得到商店12不想要。

我基本上试图在另一个查询的EXISTS IN子句

中使用此结果

6 个答案:

答案 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)

这样,JOINGROUP 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
)

SQL Fiddle

答案 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之外的所有记录。 如果另一方面你只有一个,你肯定会有一个。 提供表架构,以便人们可以正确地帮助您