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病気になってもまだ店1を手に入れて、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)

このように、どちらJOINGROUP 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を除くすべてが得られます。一方、1つしかない場合は、確実に1つになります。テーブルスキーマを指定して、適切に支援できるようにします

于 2013-03-13T15:17:52.970 に答える