MySQL LEFT JOIN के साथ पंक्तियों को हटाना


185

मेरे पास दो टेबल हैं, एक नौकरी की समय सीमा के लिए, एक नौकरी का वर्णन करने के लिए। प्रत्येक कार्य एक स्थिति ले सकता है और कुछ स्थितियों का अर्थ है कि नौकरियों की समय सीमा दूसरी तालिका से हटा दी जानी चाहिए।

मैं आसानी से SELECTउन नौकरियों / समय सीमा को पूरा कर सकता हूं जो मेरे मानदंडों के साथ मिलती हैं LEFT JOIN:

SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

( तालिका के statusअंतर्गत आता है )jobdeadline

लेकिन जब मैं इन पंक्तियों को हटाना चाहता हूं deadline, तो MySQL एक त्रुटि फेंकता है। मेरी क्वेरी है:

DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

MySQL त्रुटि कुछ भी नहीं कहती है:

आपके SQL सिंटैक्स में कोई त्रुटि है; मैनुअल को चेक करें जो आपके MySQL सर्वर वर्जन से संबंधित है, जो कि लाइन में 'LEFT JOIN jobON deadline.job_id = job.job_id WHERE status=' szaml 'लाइन के पास है।

मैं अपने SELECTकाम की DELETEक्वेरी में कैसे बदल सकता हूँ ?

जवाबों:


334

आपको बस यह निर्दिष्ट करने की आवश्यकता है कि किन तालिकाओं को लागू करना है DELETE

केवल deadlineपंक्तियों को हटाएं :

DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....

पंक्तियों deadlineऔर jobपंक्तियों को हटाएँ :

DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....

केवल jobपंक्तियों को हटाएं :

DELETE `job` FROM `deadline` LEFT JOIN `job` ....

4
"एएस" के साथ मुझे अपने उद्देश्य के लिए काम करने के लिए अपने खंड में उपनाम का उपयोग करना पड़ा (अनाथों को हटाएं): DELETE t1 FROM table1 AS t1 LEFT JOIN t2 AS t2 ON t1.uu = t2.result WHERE t2.result IS NULL
उर्स

दिलचस्प बात यह है कि, मेरे PHPMyAdmin 4.5.1 सिंटैक्स चेकर DELETEऔर के बीच कुछ भी स्वीकार नहीं करेगा FROM, लेकिन जब भी मैंने प्रेस किया तो क्वेरी ठीक-ठीक चली।
क्लेरी

38

यदि आप "तालिका के रूप में" का उपयोग कर रहे हैं, तो इसे हटाने के लिए निर्दिष्ट करें।

उदाहरण में मैंने सभी तालिका 1 पंक्तियों को हटा दिया है जो तालिका 2 में मौजूद नहीं हैं।

DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL

4
DELETE FROM deadline where ID IN (
    SELECT d.ID FROM `deadline` d LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` =  'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno');

मुझे यकीन नहीं है कि इस तरह की सब क्वेरी MySQL में काम करती है, लेकिन इसे आज़माएं। मैं मान रहा हूं कि आपकी समय सीमा तालिका में आपके पास एक आईडी कॉलम है।


1
ओपी को अभी भी यह निर्दिष्ट करने की आवश्यकता है DELETEकि क्वेरी को अस्पष्ट बनाने के लिए क्या करना चाहिए। Inउपश्रेणियों के साथ उपयोग करने से सब कुछ बहुत धीमा हो जाता है। यह सबसे अच्छा बचा है।
इयान एटकिन

कोई तालिका के बीच में उल्लेख किया है DELETEऔर FROM
इस्तियाक अहमद

1

इसे इस्तेमाल करे:

DELETE `deadline`
FROM `deadline`
INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
WHERE `job`.`id` = 123

1

MySQL आपको एक तालिका से पंक्तियों को हटाने और दूसरी तालिका में मिलान पंक्तियों को हटाने के लिए INNER JOIN खंड का उपयोग करने की अनुमति देता है।

उदाहरण के लिए, दोनों T1 और T2 तालिकाओं से पंक्तियों को हटाने के लिए जो एक निर्दिष्ट स्थिति को पूरा करते हैं, आप निम्न कथन का उपयोग करते हैं:

DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;

ध्यान दें कि आपने DELETE और FROM कीवर्ड्स के बीच T1 और T2 नाम रखे हैं। यदि आप T1 तालिका को छोड़ते हैं, तो DELETE कथन केवल T2 तालिका में पंक्तियों को हटा देता है। इसी तरह, यदि आप तालिका 2 को छोड़ देते हैं, तो DELETE विवरण केवल T1 तालिका में पंक्तियों को हटा देगा।

उममीद है कि इससे मदद मिलेगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.