2012-11-19 21 views
11

मैं इसे पोस्ट करने में वास्तव में अनिच्छुक हूं क्योंकि मुझे लगता है कि यह एक आम मुद्दा है, लेकिन मुझे ऐसा कोई जवाब नहीं मिल रहा है जो इस स्थिति पर लागू होता है ... (शायद मैं बस एक बहुत बुरा गुगलर)।किसी अन्य तालिका से समग्र कुंजी के आधार पर हटाएं

मेरे पास दो समान तालिकाओं (कॉलम वार, डेटा नहीं), तालिका 1 और तालिका 2 है। मैं तालिका 1 में रिकॉर्ड्स को मिटाना चाहता हूं जिसमें समग्र कुंजी (col1, col2) दोनों टेबलों में मौजूद है। मेरे पास यह है, जो मेरे लिए सही लगता है, लेकिन एक त्रुटि फेंक रहा है।

DELETE FROM Table1 
WHERE (**Col1**, Col2) IN 
(SELECT Col1, Col2 
FROM Table1 a 
JOIN Table2 b 
    ON a.Col1 = b.Col1 
    AND a.Col2 = b.Col2) 

त्रुटि:

Msg 4145, Level 15, State 1, Line 212 An expression of non-boolean type specified in a context where a condition is expected, near ','.

मैं कोड के भाग जो 'रेड त्रुटि squiggles' है लगभग दो * डाल दिया है।

+0

मुझे विश्वास है कि यह SQL-सर्वर है? – gdoron

+0

हाँ, क्षमा करें। अधिक विशिष्ट होना चाहिए था। यहां काम पर हम एसक्यूएल-सेवर को एसक्यूएल और ओरेकल के रूप में ओरेकल के रूप में संदर्भित करते हैं। – Jeff

+0

चूंकि ओरेकल एसक्यूएल सर्वर से बहुत पुराना "पुराना" है, अजीब सम्मेलन लेकिन ... यदि यह आपके मालिक को खुश करता है और आप अमीर हो जाते हैं, तो क्यों नहीं! – gdoron

उत्तर

18

यह हो सकता है सफाई से साथ JOIN का उपयोग किया अपने DELETE:

DELETE a 
FROM 
    Table1 a 
    JOIN Table2 b 
     ON a.Col1 = b.Col1 
     AND a.Col2 = b.Col2 
+0

यह समाधान काम करता है, लेकिन मुझे उम्मीद है कि आप समझा सकते हैं कि मेरा काम क्यों नहीं हुआ। मैंने इसी तरह की समस्याओं का समाधान देखा है जो '(col1, col2) 'वाक्यविन्यास का उपयोग करते हैं। – Jeff

+0

@ जेफ जो ओरेकल के लिए मान्य है, लेकिन एसक्यूएल सर्वर नहीं ... वे एसक्यूएल की थोड़ी अलग बोलीभाषाओं का उपयोग करते हैं और हमेशा विनिमय नहीं होते हैं। –

+0

यह समझ में आता है। मैं शपथ ले सकता था कि मैंने कुछ समय पर SQL-Server में इस वाक्यविन्यास का उपयोग किया था, लेकिन शायद मैं गलत हूं। यह सिग्नल को सीधे SQL-Server, MySQL, और Oracle के बीच रखने की कोशिश कर रहा है। धन्यवाद! – Jeff

7

कौन सा डीबीएमएस यह क्या है? यदि यह मौखिक है तो pairwise तुलना काम करना चाहिए।

DELETE FROM Table1 
WHERE (Col1, Col2) IN 
(SELECT Col1, Col2 
FROM Table2) 

यदि यह SQL सर्वर है तो माइकल के समाधान को काम करना चाहिए।

+0

यह एचएसक्यूएलडीबी में भी काम करता है: 'तालिका 1 से हटाएं जहां (col1, col2, col3) में (col1, col2, col3 को someview123 से चुनें जहां ...) ' – binwiederhier

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

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