การอ้างอิงคู่มือ:
มีสองวิธีในการลบแถวในตารางโดยใช้ข้อมูลที่มีอยู่ในตารางอื่น ๆ ในฐานข้อมูลที่มี: ใช้ย่อยเลือกหรือระบุตารางเพิ่มเติมใน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_idlink_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ซึ่งเป็นสง่าน้อยและมักจะช้าลง