SQL सर्वर में, त्रुटि संदेश 116 तब होता है जब आप किसी सबक्वेरी में एक से अधिक स्तंभों को EXISTS
के साथ प्रस्तुत किए बिना चुनने का प्रयास करते हैं ऑपरेटर।
पूरी त्रुटि इस तरह दिखती है:
Msg 116, Level 16, State 1, Line 5 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
उदाहरण
यहां एक क्वेरी का उदाहरण दिया गया है जो इस त्रुटि को उत्पन्न करती है।
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName IN (SELECT * FROM Dogs);
परिणाम:
Msg 116, Level 16, State 1, Line 5 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
इस क्वेरी के साथ समस्या यह है कि सबक्वेरी एक तारक का उपयोग करता है (*
) Dogs
. से सभी स्तंभों का चयन करने के लिए टेबल। उस तालिका में कई स्तंभ हैं, और इसलिए त्रुटि उत्पन्न होती है।
त्रुटि कैसे ठीक करें
हम उपरोक्त त्रुटि को कुछ तरीकों से ठीक कर सकते हैं।
इसे ठीक करने का एक तरीका तारक (*
.) को बदलना है ) सबक्वेरी में एक कॉलम नाम के साथ:
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName IN (SELECT DogName FROM Dogs);
इसका मतलब है कि सबक्वेरी अब टेबल के सभी कॉलम के बजाय सिर्फ एक कॉलम लौटाती है।
इसे ठीक करने का दूसरा तरीका यह है कि वह करें जो त्रुटि संदेश सुझाता है और EXISTS
. का उपयोग करें IN
. के बजाय ऑपरेटर ।
ऐसा करने के लिए क्वेरी के निर्माण में थोड़ी भिन्नता की आवश्यकता होती है:
SELECT
CatId,
CatName
FROM Cats c
WHERE EXISTS (SELECT * FROM Dogs d
WHERE c.CatName = d.DogName);
जैसा कि आप उम्मीद कर सकते हैं, EXISTS
ऑपरेटर भी काम करेगा, भले ही आप केवल एक कॉलम को स्पष्ट रूप से बताएं:
SELECT
CatId,
CatName
FROM Cats c
WHERE EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
लेकिन इसके विपरीत IN
ऑपरेटर, EXISTS
यदि आप सबक्वायरी में स्पष्ट रूप से एकाधिक कॉलम नामों का चयन करते हैं तो भी काम करेगा:
SELECT
CatId,
CatName
FROM Cats c
WHERE EXISTS (SELECT DogId, DogName FROM Dogs d
WHERE c.CatName = d.DogName);