วิธีแยกบันทึกที่มีค่าบางอย่างในการเลือก sql

ฉันจะเลือกเฉพาะร้านค้าที่ไม่มีลูกค้า 5 ได้อย่างไร

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

ฉันกำลังลองสิ่งนี้:

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

ดูเหมือนว่าจะทำให้ฉันได้รับร้านค้าทั้งหมดที่มีลูกค้ารายนั้น แต่ฉันไม่สามารถทำสิ่งที่ตรงกันข้ามได้เพราะถ้าฉันทำ <> 5 ฉันจะยังคงได้รับ Store 1 และ 2 ซึ่งฉันไม่ต้องการ

โดยพื้นฐานแล้วฉันกำลังพยายามใช้ผลลัพธ์นี้ในส่วนคำสั่ง EXISTS IN ของแบบสอบถามอื่น


person MisterIsaak    schedule 13.03.2013    source แหล่งที่มา


คำตอบ (6)


ทางเดียว:

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)

ด้วยวิธีนี้ทั้ง JOIN และ GROUP BY ก็ไม่จำเป็น

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

เอาท์พุท

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

person squillman    schedule 13.03.2013

คุณสามารถใช้ EXCEPT ไวยากรณ์ ได้ เช่น:

SELECT var FROM table1
EXCEPT
SELECT var FROM table2
person lozsui    schedule 08.11.2016
comment
มีค่าไม่เพียงพอในตัวอย่าง คำตอบจะดีกว่าหากใช้ข้อความจริงในการแก้ปัญหาคำถามเดิม -1 - person Jim Lahman; 08.11.2019

<> จะให้ค่าทั้งหมดแก่คุณอย่างแน่นอนซึ่งไม่เท่ากับ 5 หากคุณมีบันทึกมากกว่าหนึ่งรายการในตาราง มันจะให้คุณทั้งหมดยกเว้น 5 ในทางกลับกัน ถ้าคุณมีเพียงรายการเดียว คุณจะได้รับหนึ่งรายการอย่างแน่นอน ให้สคีมาตารางเพื่อให้สามารถช่วยเหลือคุณได้อย่างเหมาะสม

person kombo    schedule 13.03.2013