मैनुअल का हवाला देते हुए:
डेटाबेस में अन्य तालिकाओं में निहित जानकारी का उपयोग करके तालिका में पंक्तियों को हटाने के दो तरीके हैं: उप-चयन का उपयोग करना, या 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
।
तकनीक @ मिहाई ने काम करने के साथ ही (सही ढंग से लागू) भी टिप्पणी की :
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
, जिसके लिए स्टेपिंग स्टोन ( उदाहरण में) है , जो कम सुरुचिपूर्ण है और आमतौर पर धीमी है।