2013-03-13 17 views
14

Come selezionare solo i negozi che non dispongono di client 5?Come escludere record con determinati valori in sql selezionare

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

Sto cercando qualcosa di simile:

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

che sembra farmi tutti i negozi che hanno quel cliente, ma non riesco a fare il contrario, perché se lo faccio <> 5 malato ancora ottenere Store 1 e 2 che non voglio.

praticamente sto cercando di usare questo risultato in EXISTS IN clausola di un'altra interrogazione

risposta

19

Un modo:

012.
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 

USCITA

╔═════════╗ 
║ 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) 

In questo modo né JOINGROUP BY è necessario.

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

se si dispone di più di un record nella tabella che vi darà tutte tranne 5. se d'altra parte si ha un solo, si otterrà sicuramente uno. Dare lo schema della tabella in modo che si può fare come si deve

3

È possibile utilizzare EXCEPT syntax, ad esempio:

SELECT var FROM table1 
EXCEPT 
SELECT var FROM table2 
Problemi correlati