5

एसक्यूएल सर्वर 2005.मैं उन विदेशी कुंजी के लिए कैसे पूछूं जो उनकी बाधाओं से मेल नहीं खाते हैं?

मैं उन अनुप्रयोगों के डेटाबेस में विदेशी कुंजी बाधाओं को जोड़ रहा हूं जिन्हें कथित रूप से उनकी आवश्यकता नहीं थी। स्वाभाविक रूप से, डेटा अविश्वसनीय हो गया है और विदेशी कुंजी क्षेत्र में अनाथ प्रविष्टियां हैं।

सेटअप:
दो टेबल, टेबलयूसर और टेबल ऑर्डर। टेबलयूसर में प्राथमिक कुंजी 'उपयोगकर्ता आईडी' है, और टेबलऑर्डर में विदेशी कुंजी 'UserID' है।

मैं पंक्तियों को कैसे ढूंढूं जहां TableOrder.UserID में TableUser.UserID में कोई मिलान प्रविष्टि नहीं है?

उदाहरण के लिए, TableOrder.UserID 250 का अपना महत्व होता है, लेकिन वहाँ 250

+0

एक बार जब आप उन्हें पा लेते हैं, तो आप उनके साथ क्या करना चाहते हैं? उदा।, उन्हें हटा दें? – erickson

+0

ईआरआरआर, यदि कोई विदेशी कुंजी है तो इसका मिलान कैसे नहीं हो सकता है? क्या आपके पास वास्तव में आपके एसक्यूएल में एफके हार्ड कोड है? –

+0

उसका मतलब उन फ़ील्ड वाले टेबल हैं जिन्हें एप्लिकेशन द्वारा विदेशी कुंजी के रूप में माना जाता है, लेकिन डेटाबेस द्वारा कभी भी लागू नहीं किया गया था। – BradC

उत्तर

8

यहाँ के लिए कोई मिलता-जुलता TableUser.UserID कुंजी है एक ही रास्ता है:

select * from TableOrder where UserID not in (select UserID from TableUser); 

वहाँ लिखने के लिए विभिन्न तरीके हैं इस तरह की क्वेरी।

4
अन्य आम तरीका

एक बाएँ बाहरी में शामिल होने है:

SELECT * FROM TableOrder o 
LEFT OUTER JOIN TableUser u ON o.UserID = u.UserID 
WHERE u.UserID is NULL 

इस क्वेरी भी जहां खंड के बिना उपयोगी हो सकता है, के माध्यम से ब्राउज़ करें और संबंधित मानों को देखने के (अगर वे मौजूद हैं), और देखने के लिए जो किसी के पास कोई मैच नहीं है।

0

शुरू करने के लिए तालिकाओं में कोई एफके प्रतिबंध नहीं था। एफके और पीके जैसे इस्तेमाल किए गए थे लेकिन कोडित नहीं थे - विश्वास यह था कि वे अनावश्यक उपरांत थे। तो हमारे पास सभी कॉलम हैं, लेकिन कोई कोडित बाधा नहीं है। जब मैं उन्हें अंदर रखने के लिए गया ताकि उन्हें लागू किया जा सके, मैंने पाया कि बहुत सारे उल्लंघन हुए थे।

आपका प्रश्न समस्या को हाइलाइट करता है। वे अनावश्यक उपरि नहीं हैं, वे लोगों को सामान्य डेटाबेस asshattery से रोका।

ग्रेग और ब्रैड के दोनों उत्तरों ने मुझे मदद की।

+0

मुझे लगता है कि यह एक आम गलतफहमी है। बहुत से लोग सोचते हैं कि व्यापार तर्क के लिए मध्यम स्तर पर किया जाना चाहिए। लेकिन एफके किसी भी संबंधपरक डेटाबेस का एक मौलिक हिस्सा है। यदि डेटाबेस इसे अच्छी तरह से नहीं कर सकता है तो अन्य समस्याएं हैं ... –

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

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