ฉันมีสองตารางหนึ่งมีคีย์หลักอื่น ๆ มีเป็นคีย์ต่างประเทศ
ฉันต้องการดึงข้อมูลจากตารางหลักเฉพาะในกรณีที่ตารางรองไม่มีรายการที่มีคีย์ จัดเรียงตรงข้ามกับการรวมภายในแบบธรรมดาซึ่งส่งคืนเฉพาะแถวที่รวมเข้าด้วยกันด้วยคีย์
ฉันมีสองตารางหนึ่งมีคีย์หลักอื่น ๆ มีเป็นคีย์ต่างประเทศ
ฉันต้องการดึงข้อมูลจากตารางหลักเฉพาะในกรณีที่ตารางรองไม่มีรายการที่มีคีย์ จัดเรียงตรงข้ามกับการรวมภายในแบบธรรมดาซึ่งส่งคืนเฉพาะแถวที่รวมเข้าด้วยกันด้วยคีย์
คำตอบ:
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
ภาพเต็มของการเข้าร่วม
จาก aticle: http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
B.Key IS NULL
แต่เรายังเทียบเคียงA.Key = B.Key
?
SELECT
*
FROM
primarytable P
WHERE
NOT EXISTS (SELECT * FROM secondarytable S
WHERE
P.PKCol = S.FKCol)
โดยทั่วไปแล้ว(NOT) EXISTS
เป็นทางเลือกที่ดีกว่า(NOT) IN
หรือ(LEFT) JOIN
LEFT JOIN
ประสิทธิภาพสูงกว่าNOT EXIST
ใช้การเข้าร่วมที่เหลือ "ไม่มีอยู่":
SELECT p.*
FROM primary_table p LEFT JOIN second s ON p.ID = s.ID
WHERE s.ID IS NULL
อีกวิธีหนึ่งคือ:
SELECT * FROM TABLE1 WHERE id NOT IN (SELECT id FROM TABLE2)
SELECT P.*
FROM primary_table P
LEFT JOIN secondary_table S on P.id = S.p_id
WHERE S.p_id IS NULL
P.key = S.key
แล้วบอกว่าwhere S.key IS NULL
ไม่ทำให้ P.key เป็นโมฆะเช่นกัน?
หากคุณต้องการเลือกคอลัมน์จากตารางแรก "ซึ่งมีอยู่ในตารางที่สองเช่นกันในกรณีนี้คุณสามารถใช้ได้เช่นEXCEPT
กันในกรณีนี้ชื่อคอลัมน์อาจแตกต่างกันได้เช่นกัน แต่ประเภทข้อมูลควรเหมือนกัน
ตัวอย่าง:
select ID, FName
from FirstTable
EXCEPT
select ID, SName
from SecondTable
สิ่งนี้มีประโยชน์ในการใช้ใน COGNOS เนื่องจากอนุญาตให้สร้างคำสั่ง SQL "ไม่อยู่ใน" ใน Cognos ได้ แต่ใช้เวลาในการรันนานเกินไป ฉันได้เข้ารหัสตาราง A ด้วยตนเองเพื่อเข้าร่วมกับตาราง B ใน Cognos เป็น A.key "not in" B.key แต่แบบสอบถามใช้เวลานานเกินไป / ไม่ส่งคืนผลลัพธ์หลังจาก 5 นาที
สำหรับใครก็ตามที่กำลังมองหาโซลูชัน "NOT IN" ใน Cognos นี่คือสิ่งที่ฉันทำ สร้างแบบสอบถามที่รวมตาราง A และ B ด้วย LEFT JOIN ใน Cognos โดยการเลือกประเภทลิงก์: ตาราง A.Key มีค่า "0 ถึง N" ในตาราง B จากนั้นเพิ่มตัวกรอง (ซึ่งสอดคล้องกับ Where Clauses) สำหรับ: ตาราง B .Key เป็นโมฆะ
วิ่งเร็วและเหมือนมีเสน่ห์