यह पहचानना कि कौन से मान तालिका पंक्ति से मेल नहीं खाते हैं


10

मैं आसानी से यह जांचने में सक्षम होना चाहूंगा कि कौन से विशिष्ट पहचानकर्ता एक तालिका में मौजूद नहीं हैं, जो एक प्रश्न में दिए गए हैं।

बेहतर ढंग से समझाने के लिए, यहाँ मैं क्या करूँ, यह जाँचने के लिए कि सूची की कौन सी आईडी "1, 2, 3, 4" तालिका में मौजूद नहीं है:

  1. SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4'), मान लें कि तालिका में ID 2 के साथ कोई पंक्ति नहीं है।
  2. परिणाम को Excel में डंप करें
  3. परिणाम सूची में प्रत्येक सूची मान की खोज करने वाली मूल सूची पर एक VLOOKUP चलाएं।
  4. कोई भी VLOOKUP जो परिणाम में #N/Aहै वह उस मान पर है जो तालिका में नहीं था।

मुझे लगता है कि ऐसा करने का एक बेहतर तरीका हो गया है। मैं देख रहा हूं, आदर्श रूप से, जैसे कुछ के लिए

जाँच करने के लिए सूची -> तालिका पर जाँच करने के लिए क्वेरी -> सूची में सदस्य तालिका में नहीं


कृपया हमें SQL सर्वर के संस्करण का अनुमान न लगाएं?
हारून बर्ट्रेंड


क्षमा याचना। [संपादित] यह पुराना है। NOT IN IN के साथ समस्या यह है कि टेबल में बाकी सब कुछ वापस आ जाएगा ...
NReilingh

जवाबों:


14

उपयोग करें EXCEPT:

SELECT * FROM
  (values (1),(2),(3),(4)) as T(ID)
EXCEPT
SELECT ID 
FROM [TABLE];

SqlFiddle देखें ।


valuesनिर्माता केवल एसक्यूएल सर्वर 2008 या बाद में पर काम करेंगे। 2005 के लिए, का उपयोग करें

SELECT 'value'
UNION SELECT 'value'

इस एसओ जवाब में विस्तृत रूप में ।


वूप्स, निर्दिष्ट होना चाहिए। क्या होगा अगर आईडी एक चरचर है?
NReilingh

1
@NReilingh फिर अपने DB को फिर से डिज़ाइन करें :) लेकिन यह वही काम करना चाहिए जो मुझे लगता है
JNK

मैं Incorrect syntax near the keyword 'values'.दौड़ते समय मिलता रहता हूँSELECT * FROM (values ('search string'),('other string')) as T(ID)
NReilingh

SQL Server 2008r2 में आपका सिंटैक्स मेरे लिए ठीक काम करता है - मैंने आपकी टिप्पणी को इसमें पेस्ट किया और यह चला।
जेएनके

मैं 2005 में हूँ। मसीह।
NReilingh

6

मैं एक टेबल वैरिएबल या टेम्‍प टेबल बनाऊंगा, जिसमें आप जिस आईडी को खोज रहे हैं ... उसके बाद रेमुस सॉल्यूशन, माइनस 2008 सिनेटिक शुगर का उपयोग करें:

declare @t table (ID int)
insert into @t values (1)
insert into @t values (2)
insert into @t values (3)
insert into @t values (4)
insert into @t values (5)

select ID from @t
except
select ID
from [Table];

3

जब मैंने यह प्रश्न पूछा था, तो अब मैं एक दो साल का समझदार (और एक नया SQL सर्वर) हूं, इसलिए फेमस प्रश्न बैज का जश्न मनाने के लिए मुझे यह पूछने के लिए मिला, यहां मैं अब क्या करूंगा। (मुझे नहीं लगता कि मैंने कभी EXCEPTऑपरेटर का उपयोग किया है ।)

मैं कहूंगा कि LEFT JOINनीचे की विधि अधिक उपयोगी है EXCEPTक्योंकि आप इसे सीटीई की आवश्यकता के बिना अन्य जोड़ों के साथ बना सकते हैं।

SELECT v.val
  FROM (VALUES (1), (2), (3), (4), (5)) v (val)
    LEFT JOIN dbo.SomeTable t
      ON t.id = v.val
  WHERE t.id IS NULL;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.