2013-03-13 30 views
14

Làm cách nào để chỉ chọn các cửa hàng không có ứng dụng khách 5?Cách loại trừ các bản ghi với các giá trị nhất định trong sql chọn

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

Tôi đang cố gắng một cái gì đó như thế này:

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

Đó dường như để làm cho tôi tất cả các cửa hàng có mà khách hàng nhưng tôi không thể làm ngược lại vì nếu tôi làm <> 5 bệnh vẫn nhận được Lưu trữ 12 mà tôi không muốn.

tôi về cơ bản cố gắng sử dụng kết quả này tại khoản EXISTS IN của truy vấn khác

Trả lời

19

Một cách:

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 

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) 

Bằng cách này không phải JOIN cũng không GROUP BY là cần thiết.

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

nếu bạn có nhiều hơn một bản ghi trong bảng nó sẽ cung cấp cho bạn tất cả ngoại trừ 5. nếu mặt khác bạn chỉ có một, bạn sẽ nhận được chắc chắn một. Cho schema bảng để có thể giúp bạn đúng

3

Bạn có thể sử dụng EXCEPT syntax, ví dụ:

SELECT var FROM table1 
EXCEPT 
SELECT var FROM table2 
Các vấn đề liên quan