Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

IN क्लॉज में कॉलम मौजूद नहीं है, लेकिन SQL चलता है

यह काम करेगा यदि बाहरी . में एक तालिका query में उस नाम का एक कॉलम है। ऐसा इसलिए है क्योंकि बाहरी क्वेरी से कॉलम नाम सबक्वेरी के लिए उपलब्ध हैं, और आप जानबूझकर अपनी सबक्वायरी SELECT सूची में बाहरी क्वेरी कॉलम का चयन करने के लिए अर्थपूर्ण हो सकते हैं।

उदाहरण के लिए:

CREATE TABLE #test_main (colA integer) 
CREATE TABLE #test_sub (colB integer)

-- Works, because colA is available to the sub-query from the outer query. However,
-- it's probably not what you intended to do:
SELECT * FROM #test_main WHERE colA IN (SELECT colA FROM #test_sub)

-- Doesn't work, because colC is nowhere in either query
SELECT * FROM #test_main WHERE colA IN (SELECT colC FROM #test_sub)

जैसा कि डेमियन देखता है, इस गैर-स्पष्ट "गॉचा" से खुद को बचाने का सबसे सुरक्षित तरीका सबक्वेरी में अपने कॉलम नामों को योग्य बनाने की आदत डालना है:

-- Doesn't work, because colA is not in table #test_sub, so at least you get
-- notified that what you were trying to do doesn't make sense.
SELECT * FROM #test_main WHERE colA IN (SELECT #test_sub.colA FROM #test_sub)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैक्स बनाम टॉप 1 - कौन सा बेहतर है?

  2. तालिका नाम बनाना जो MS SQL सर्वर में आरक्षित शब्द/कीवर्ड हैं

  3. SQL सर्वर डेटाबेस में डेटा खोए बिना सीडीसी सक्षम तालिका से कॉलम कैसे जोड़ें या छोड़ें - SQL सर्वर ट्यूटोरियल

  4. डायनेमिक पिवट के लिए कॉलम सॉर्ट करें

  5. यह CASE अभिव्यक्ति ELSE खंड तक कैसे पहुँचती है?