2013-03-13 11 views
14

Wie wähle ich nur die Geschäfte, die Client 5 nicht haben?Wie Sie Datensätze mit bestimmten Werten in Sql ausschließen Wählen Sie

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

Ich versuche, etwas wie folgt aus:

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

Das scheint alles, um mich in die Läden, die das Client haben, aber ich kann nicht das Gegenteil tun, weil, wenn ich <> 5 krank noch tun bekommen Store 1 und 2 was ich nicht will.

Ich bin im Grunde versucht, dieses Ergebnis in einer anderen EXISTS IN Abfrage zu verwenden Klausel

Antwort

19

One way:

SELECT DISTINCT sc.StoreId 
FROM StoreClients sc 
WHERE NOT EXISTS(
    SELECT * FROM StoreClients sc2 
    WHERE sc2.StoreId = sc.StoreId AND sc2.ClientId = 5) 
8
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 

OUTPUT

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

SQL Fiddle

12
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 notwendig.

-1
<> will surely give you all values not equal to 5. 

, wenn Sie mehr als einen Datensatz in der Tabelle haben wird es Ihnen alle geben außer 5. , wenn auf der anderen Seite nur eine haben, werden Sie sicherlich einen bekommen. Geben Sie das Tabellenschema , so dass man Ihnen richtig

3

helfen können Sie EXCEPT syntax verwenden können, zum Beispiel:

SELECT var FROM table1 
EXCEPT 
SELECT var FROM table2 
Verwandte Themen