การอ้างอิงคู่มือ:
มีสองวิธีในการลบแถวในตารางโดยใช้ข้อมูลที่มีอยู่ในตารางอื่น ๆ ในฐานข้อมูลที่มี: ใช้ย่อยเลือกหรือระบุตารางเพิ่มเติมในUSING
ข้อ เทคนิคใดที่เหมาะสมกว่านั้นขึ้นอยู่กับสถานการณ์เฉพาะ
เหมืองเน้นหนัก การใช้ข้อมูลที่ไม่ได้อยู่ในตารางอื่นนั้นค่อนข้างยุ่งยาก แต่ก็มีวิธีแก้ปัญหาที่ง่าย จากคลังแสงของเทคนิคมาตรฐานถึง ...
... การNOT EXISTS
ต่อต้านการเข้าร่วมกึ่งน่าจะง่ายและมีประสิทธิภาพมากที่สุดสำหรับDELETE
:
DELETE FROM link_group lg
WHERE NOT EXISTS (
SELECT FROM link_reply lr
WHERE lr.which_group = lg.link_group_id
);
สมมติว่า (ตั้งแต่คำจำกัดความของตารางจะไม่ให้) เป็นชื่อคอลัมน์คีย์หลักของlink_group_id
link_group
เทคนิค@Mihai แสดงความคิดเห็นทำงานเช่นกัน (นำไปใช้อย่างถูกต้อง):
DELETE FROM link_group lg
USING link_group lg1
LEFT JOIN link_reply lr ON lr.which_group = lg1.link_group_id
WHERE lg1.link_group_id = lg.link_group_id
AND lr.which_group IS NULL;
แต่เนื่องจากการแสดงออกของตารางในUSING
ข้อผูกพันกับตารางเป้าหมาย ( lg
ในตัวอย่าง) กับCROSS JOIN
คุณจะต้องเป็นตัวอย่างของตารางเดียวกันอีกก้าวหิน ( lg1
ในตัวอย่าง) สำหรับLEFT JOIN
ซึ่งเป็นสง่าน้อยและมักจะช้าลง