it-swarm.com.de

So schließen Sie Datensätze mit bestimmten Werten in sql select aus

Wie wähle ich nur die Geschäfte aus, die keinen Kunden 5 Haben?

StoreId   ClientId   
-------   ---------
  1         4     
  1         5      
  2         5     
  2         6      
  2         7   
  3         8

Ich versuche so etwas:

SELECT SC.StoreId FROM StoreClients
INNER JOIN StoreClients SC
    ON StoreClients.StoreId = SC.StoreId
    WHERE SC.ClientId = 5
GROUP BY StoreClients.StoreId

Das scheint mir alle Läden zu bringen, die diesen Client haben, aber ich kann nicht das Gegenteil tun, denn wenn ich <> 5 Tue, bekomme ich immer noch die Läden 1 Und 2, Die ich anziehe nicht wollen.

Ich versuche grundsätzlich, dieses Ergebnis in der EXISTS IN - Klausel einer anderen Abfrage zu verwenden

16
MisterIsaak

Einweg:

SELECT DISTINCT sc.StoreId
FROM StoreClients sc
WHERE NOT EXISTS(
    SELECT * FROM StoreClients sc2 
    WHERE sc2.StoreId = sc.StoreId AND sc2.ClientId = 5)
22
AdaTheDev
SELECT SC.StoreId 
FROM StoreClients SC
WHERE SC.StoreId NOT IN (SELECT StoreId FROM StoreClients WHERE ClientId = 5)

Auf diese Weise weder JOIN noch GROUP BY ist notwendig.

12
MarcinJuraszek
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

AUSGABE

╔═════════╗
║ STOREID ║
╠═════════╣
║       3 ║
╚═════════╝
10
John Woo
SELECT StoreId
FROM StoreClients
WHERE StoreId NOT IN (
  SELECT StoreId
  FROM StoreClients
  Where ClientId=5
)

SQL Fiddle

7
squillman

Sie können EXCEPT Syntax verwenden, zum Beispiel:

SELECT var FROM table1
EXCEPT
SELECT var FROM table2
3
lozsui