Cara mengecualikan catatan dengan nilai tertentu di sql pilih

Bagaimana cara saya hanya memilih toko yang tidak memiliki klien 5?

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

Saya mencoba sesuatu seperti ini:

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

Tampaknya saya mendapatkan semua toko yang memiliki klien itu tetapi saya tidak dapat melakukan sebaliknya karena jika saya melakukannya <> 5 saya masih mendapatkan Toko 1 dan 2 yang tidak saya inginkan.

Saya pada dasarnya mencoba menggunakan hasil ini di klausa EXISTS IN kueri lain


person MisterIsaak    schedule 13.03.2013    source sumber


Jawaban (6)


SATU ARAH:

SELECT DISTINCT sc.StoreId
FROM StoreClients sc
WHERE NOT EXISTS(
    SELECT * FROM StoreClients sc2 
    WHERE sc2.StoreId = sc.StoreId AND sc2.ClientId = 5)
person AdaTheDev    schedule 13.03.2013

SELECT SC.StoreId 
FROM StoreClients SC
WHERE SC.StoreId NOT IN (SELECT StoreId FROM StoreClients WHERE ClientId = 5)

Dengan cara ini JOIN atau GROUP BY tidak diperlukan.

person MarcinJuraszek    schedule 13.03.2013

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

KELUARAN

╔═════════╗
║ STOREID ║
╠═════════╣
║       3 ║
╚═════════╝
person John Woo    schedule 13.03.2013

SELECT StoreId
FROM StoreClients
WHERE StoreId NOT IN (
  SELECT StoreId
  FROM StoreClients
  Where ClientId=5
)

SQL Fiddle

person squillman    schedule 13.03.2013

Anda dapat menggunakan EXCEPT sintaksis, misalnya:

SELECT var FROM table1
EXCEPT
SELECT var FROM table2
person lozsui    schedule 08.11.2016
comment
Contohnya tidak cukup bernilai. Jawabannya akan lebih baik dengan pernyataan aktual yang menyelesaikan pertanyaan awal. -1 - person Jim Lahman; 08.11.2019

<> pasti akan memberi Anda semua nilai yang tidak sama dengan 5. Jika Anda memiliki lebih dari satu catatan dalam tabel, ia akan memberi Anda semua kecuali 5. Jika sebaliknya Anda hanya memiliki satu, Anda pasti akan mendapatkan satu. Berikan skema tabel agar dapat membantu Anda dengan baik

person kombo    schedule 13.03.2013