2012-10-02 9 views
6

निम्न क्वेरी काम करता है:"के साथ ..." के रूप में एसक्यूएल में नेविगेटर

select count(*) from everything where num not in (select num from sometable) 

निम्न क्वेरी से ऊपर के बराबर माना जाता है, लेकिन एक "अमान्य पहचानकर्ता" त्रुटि में परिणाम:

with unwanted as (select num from sometable) 
select count(*) from everything where num not in unwanted 

दूसरी क्वेरी के साथ क्या गलत है?

with unwanted as (select num from sometable) 
select count(*) from everything where num not in (select * from unwanted) 

स्पष्ट रूप से यह केवल समझ में आता है, तो select num from sometable भाग में थोड़ा और अधिक जटिल या कई बार बाद में प्रयोग किया जाता है ...

उत्तर

7

वाक्य रचना इस तरह है तेज प्रदर्शन

WITH unwanted 
AS 
(
    SELECT num 
    FROM sometable 
) 
SELECT COUNT(*) 
FROM everything a 
     LEFT JOIN unwanted b 
      ON a.num = b.num 
WHERE b.num IS NULL 
+0

मैंने आपका उत्तर स्वीकार कर लिया। फिर भी, क्या आप कृपया 'अनचाहे' से चुनने के लिए एक स्पष्टीकरण जोड़ सकते हैं, 'अवांछित' जैसा नहीं है? धन्यवाद। – snakile

+0

साथ-साथ क्लॉज को व्यू या टेबल के बराबर देखा जा सकता है, इस तथ्य को छोड़कर कि इसे रन-टाइम पर गतिशील रूप से परिभाषित किया गया है और दृश्य या तालिका के रूप में स्थिर परिभाषित नहीं किया गया है। आपके एसक्यूएल में उपयोग और सिंटैक्स हमेशा समान होता है और क्लॉज, टेबल और व्यू का नाम अदला-बदली किया जा सकता है। –

2

तुम भी तालिकाओं के लिए शामिल हो सकते हैं:

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