यह hs_id
. का मान ले रहा है बाहरी क्वेरी से।
यह पूरी तरह से एक क्वेरी के लिए मान्य है जो चयनित तालिका से किसी भी कॉलम को अपने select
में प्रोजेक्ट नहीं करता है सूची।
उदाहरण के लिए
select 10 from HotelSupplier where id = 142
where
. से मेल खाने वाली कई पंक्तियों के साथ परिणाम सेट लौटाएगा खंड और मान 10
सभी पंक्तियों के लिए।
अयोग्य कॉलम संदर्भों को निकटतम दायरे से बाहर की ओर हल किया जाता है, इसलिए इसे केवल एक सहसंबद्ध उप क्वेरी के रूप में माना जाता है।
इस क्वेरी का परिणाम Photo
. से सभी पंक्तियों को हटाना होगा जहां hs_id
तब तक रिक्त नहीं है जब तक HotelSupplier में कम से कम एक पंक्ति है जहां id =142 (और इसलिए सबक्वेरी कम से कम एक पंक्ति लौटाती है)
यह थोड़ा स्पष्ट हो सकता है यदि आप विचार करें कि इसका क्या प्रभाव है
delete from Photo where Photo.hs_id in (select Photo.hs_id)
यह निश्चित रूप से
. के बराबर हैdelete from Photo where Photo.hs_id = Photo.hs_id
वैसे यह सबसे आम "बग" दूर और दूर है जिसे मैंने व्यक्तिगत रूप से माइक्रोसॉफ्ट कनेक्ट पर गलत तरीके से रिपोर्ट किया है। Erland Somarskog ने इसे SET STRICT_CHECKS ON
के लिए अपनी इच्छा सूची में शामिल किया है