2011-08-12 16 views
5

से संबंधित क्वेरी हटाएं तो मेरे पास SQL ​​सर्वर में तालिका ए और बी है, और क्रमशः ए और बी कॉलम हैं। मैं छद्म-क्वेरी कमांड में निम्नलिखित करना चाहता हूं, लेकिन मुझे इसे समझने की प्रतीत नहीं होती है।एसक्यूएल सर्वर दो टेबल

मैं चाहता हूँ

DELETE FROM A 
WHERE a < 100 "and only if these selected (for deletion) values don't exist in column b in table B" 

करने का कारण है कि मैं मेज एक से कुछ डेटा को हटाने के लिए कोशिश कर रहा हूँ, लेकिन यह मुझे कह A.a और B.b में मूल्यों के बीच एक बाधा है कि वहाँ एक त्रुटि दे रहा है है।

क्या इसमें उपनाम शामिल हैं? यह भ्रामक है ..

+0

आप एसक्यूएल सर्वर के किन संस्करणों का उपयोग कर रहे हैं ? –

उत्तर

11

इस प्रयास करें नए आप SQL सर्वर 2005 या उपयोग कर रहे हैं:

DELETE FROM TableA 
WHERE a < 100 AND 
a NOT IN (SELECT B FROM TableB) 

एसक्यूएल सर्वर 2000 के लिए यह काम करना चाहिए:

DELETE ta 
FROM TableA as ta 
LEFT JOIN TableB as tb 
ON ta.a = tb.b 
WHERE ta.a < 100 AND tb.b IS NULL 
+0

मुझे इस सवाल से निश्चित नहीं था, लेकिन यह देखते हुए कि बाधा उल्लंघन थे, क्या TableB.b TableA में एक विदेशी कुंजी लुकअप हो सकता है? यदि हां, तो उचित खंड में 'ए' के ​​लिए 'आईडी' को प्रतिस्थापित करने के अलावा अन्य हटाए जाने के रूप में कोई अंतर होगा? – shelleybutterfly

+0

हमम, मुझे यकीन नहीं है कि मैं समझता हूं। मैं आपकी विदेशी कुंजी धारणा से सहमत हूं। यह डिलीट मूल रूप से टेबलए से किसी भी रिकॉर्ड को हटा देगा जिसे टेबलबी से संदर्भित नहीं किया जा रहा था, जो कि उसे क्या चाहिए। –

+0

@ एबे मिस्सेलर, आपकी पहली क्वेरी बस महान काम करती है! ऐसा लगता है कि एमएसएसक्यूएल में आप प्रतिबंधों का एक समूह लागू कर सकते हैं ..? मैंने हाल ही में MySQL सीख लिया है, लेकिन ऐसा लगता है कि SQL सर्वर प्रबंधन स्टूडियो में मुझे इनमें से कोई भी सुविधा दिखाई नहीं दे रही है। – musicliftsme

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