2009-12-08 15 views
8

में शामिल होने नहीं कर सकते कसरत करने लगते हैं क्या im गलत यहाँसमस्या को हटाने बाईं बाहरी का उपयोग कर पंक्तियों mysql

SELECT * FROM tbl_imagelabel LEFT OUTER JOIN tbl_image ON tbl_imagelabel.label_id = tbl_image.label_id WHERE tbl_image.label_id is NULL

कर सटीक पंक्तियाँ मैं हटाना चाहते हैं पता चलता है। लेकिन यह से हटाने के लिए अगर मैं से चयन * बदलने does not काम

DELETE FROM tbl_imagelabel LEFT OUTER JOIN tbl_image ON tbl_imagelabel.label_id = tbl_image.label_id WHERE tbl_image.label_id is NULL

+0

वहाँ एक त्रुटि संदेश है? – Bobby

+0

'DELETE' क्वेरी के सामने 'EXPLAIN विस्तारित' चलाएं और यहां आउटपुट पेस्ट करें। –

उत्तर

10

आपको लगता है कि वाक्य रचना के साथ एक एकल क्वेरी में अनेक तालिकाओं से नष्ट करने के लिए कोशिश कर रहे हैं। अधिक की तरह कुछ की कोशिश करो (और यह सिर्फ एक ढीला उदाहरण है, अनुकूलित या कुछ भी होना नहीं):

DELETE FROM tbl_imagelabel 
WHERE label_id IN (
    SELECT tbl_imagelabel.label_id 
    FROM tbl_imagelabel 
    LEFT OUTER JOIN tbl_image 
     ON tbl_imagelabel.label_id = tbl_image.label_id 
    WHERE tbl_image.label_id IS NULL 
) 
+0

34 सेकंड सभी फर्क पड़ता है :-) – cdonner

+0

लोएल ... मुझे पता है ... समाधान के लिए +1 किसी भी तरह से: डी –

+0

पक्ष को वापस करने में खुशी :-) – cdonner

4
DELETE FROM tbl_imagelabel 
where label_id IN 
(
SELECT tbl_imagelabel.label_id FROM tbl_imagelabel 
LEFT OUTER JOIN tbl_image 
ON tbl_imagelabel.label_id = tbl_image.label_id WHERE tbl_image.label_id is NULL 
) 

कि label_id संभालने अद्वितीय प्राथमिक कुंजी है।

6

मेरा मानना ​​है कि यह स्पष्ट रूप से शामिल होने के बिना वही काम करता है। हटाएँ बयान में स्पष्ट रूप से शामिल होने के

DELETE FROM tbl_imagelabel 
WHERE label_id NOT IN (SELECT label_id FROM tbl_image) 
+0

+1 अच्छा पकड़ो! (टिप्पणियों पर डांग 15 चार सीमा) –

3

जबकि सब यहाँ दिए गए उत्तर प्रश्न में दिए गए विशिष्ट उदाहरण के हल के लिए वैकल्पिक साधन उपलब्ध कराते हैं, वे सब वास्तव में एक छोड़ दिया बाहरी को शामिल किए बिना ऐसा करते हैं।

DELETE FROM til USING tbl_imagelabel as til LEFT OUTER JOIN tbl_image as ti 
ON til.label_id = ti.label_id WHERE ti.label_id is NULL 

संदर्भ::

8

, MySQL पर 5 + आगे संदर्भ के लिए:

कि ऐसा करने के लिए, आप 'का उपयोग' बयान इस प्रकार की जरूरत है
DELETE tbl1.* FROM tbl1 LEFT JOIN tbl2 USING(fld) WHERE tbl2.fld IS NULL; 

यह किसी भी ऑर्फ़ को हटा देगा TBL1 पर ans का उपयोग कर fld में शामिल होने के रूप में।

जीएल पाउलो बुएनो

संबंधित मुद्दे