delete
का प्रयोग करें साथ में join
इस तरह:
mysql> create table a (id int);
mysql> insert into a values (1), (2), (3), (4);
mysql> create table b (id int);
mysql> insert into b values (2), (3);
mysql> delete a from a join b on a.id=b.id where b.id > 2;
mysql> select * from a;
+------+
| id |
+------+
| 1 |
| 2 |
| 4 |
+------+
यह तालिकाओं की मनमानी संख्या को मापता है, उदा.:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB;
यह a
. से हट जाएगा b
. के उन रिकॉर्ड से संदर्भित सभी रिकॉर्ड जो बदले में c
. से संदर्भित हैं . आप इस तरह WHERE क्लॉज भी जोड़ सकते हैं:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
WHERE a.status='done' AND
b.status='open' AND
c.status='open';
यदि आप हटाए जाने वाली पंक्तियों की संख्या को सीमित करना चाहते हैं, तो ऐसा करें:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
LIMIT 500000;
यदि आप पहली 500000 पंक्तियों को हटाना चाहते हैं, तो आपको यह परिशोधित करने की आवश्यकता है कि कौन सी पंक्तियाँ पहले हैं, इसलिए आपको पंक्तियों के बीच कुछ क्रम स्थापित करने की आवश्यकता है। दूसरे शब्दों में आपको पंक्तियों को कुछ मानदंडों के अनुसार क्रमबद्ध करना होगा और फिर इस तरह सीमित करना होगा:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;