2012-11-07 12 views
5

पर कोई मूल्य नहीं मिला है, मैं एक परियोजना पर काम कर रहा हूं, और मेरे पास कई हजार रिकॉर्ड की एक सूची है जिसे मुझे चेक की आवश्यकता है। मुझे उन लोगों की सूची प्रदान करने की ज़रूरत नहीं है जिन्हें मैं नहीं मिला, और उन प्रश्नों को प्रदान करता हूं जिन्हें मैं ढूंढने के लिए उपयोग करता हूं ताकि मेरे वरिष्ठ अपने काम की जांच कर सकें।लौटने में क्वेरी

मैं स्वीकार करूंगा कि मैं एसक्यूएल के लिए अपेक्षाकृत नया हूं। मेरे पास अस्थायी तालिकाओं को बनाने की पहुंच नहीं है, जो एक ऐसा तरीका है जिसे मैंने ऐसा करने के बारे में सोचा था।

मैं क्या कर रहा हूँ का एक मूल विचार:

select t.column1, t.column2 
from table1 t 
where t.column1 in ('value1','value2','value3') 

तो मान 1 और value3 डेटाबेस में हैं, लेकिन मान 2 मैं मान 2 और दूसरों को नहीं प्रदर्शित करने के लिए की जरूरत है, नहीं है।

मैंने क्वेरी को एम्बेड करके ISNULL, और क्वेरी से NOT मानों का चयन करने का प्रयास किया है।

मैंने Google पर और इस साइट पर एक प्रश्न में नहीं मिले रिकॉर्ड लौटने की खोज की है, और अभी भी कुछ भी नहीं मिला है।

+0

सर्वर पूर्ण टेबल, दृश्य, स्टोर प्रक्रिया, .. पर आप क्या बना सकते हैं? यह किस प्रकार का वर्ग है? – Jester

+0

क्या "t1olumn1, t.column2 तालिका 1 टी से चुनें जहां t.column1 नहीं ('value1', 'value2', 'value3')" आपके लिए काम करता है? यदि आपके पास केवल हजारों आइटम हैं, तो आप उन्हें इस तरह की सूची में डाल सकते हैं। –

उत्तर

0

समाधान ओरेकल में काम कर सकता है जहां दोहरी एकल पंक्ति एकल कॉलम तालिका है। आपको एक टेबल की आवश्यकता है जहां आप वांछित मूल्यों का आभासी चयन कर सकते हैं!

चेतावनी क्योंकि मेरे पास डीबी तक पहुंच नहीं है मैंने कभी नीचे क्वेरी का परीक्षण नहीं किया।

SELECT tab_all.col_search, t.column1, t.column2 
FROM 
(
    Select value1 AS col_search from dual 
    union all 
    Select value2 from dual 
    union all 
    Select value3 from dual 
) tab_all left join table1 t 
on col_search = t.column1 
WHERE t.column1 is null; 

मैं Oracle की दोहरी से चयन मान 1 के sqlserver बराबर चयन मान 1 है या 'मान 1' का चयन belive।

तो

SELECT tab_all.col_search, t.column1, t.column2 
FROM 
(
    Select value1 AS col_search 
    union all 
    Select value2 AS col_search 
    union all 
    Select value3 AS col_search 
) tab_all left join table1 t 
on col_search = t.column1 
WHERE t.column1 is null; 

कोशिश मैं sqlserver व्यक्ति हो सकता है कि Oracle की चयन दोहरी से की RichardTheKiwi संस्करण बेहतर है नहीं कर रहा हूँ के रूप में।

पहले एक मेज जो इस तरह के सभी मानों कि आप की आवश्यकता में शामिल होंगे बनाने के लिए:

+0

पर्याप्त मेला, यह SQL सर्वर 2008 आर 2 है। मुझे निर्दिष्ट होना चाहिए था कि हम टी-एसक्यूएल तक ही सीमित हैं। मैं केवल चयन, अपडेट, आवेषण और हटाए जाने के लिए काफी प्रतिबंधित हूं, मैं संग्रहित प्रक्रियाओं तक पहुंच नहीं सकता (हालांकि मुझे इसके आसपास के तरीके मिल गए हैं), दृश्य या तालिकाओं को नहीं बना सकते हैं। –

2

मैं कुछ इसी तरह की कोशिश की है।

select * from table_values tv where tv.value not in (select t.column1 
from table1 t); 

इस मूल्यों की जरूरत वापस आ जाएगी:

कहना

create table table_values(values varchar2(30)); 

फिर नीचे खंड में कोशिश की सुविधा देता है।

+0

पहली पोस्ट में उन्होंने कोई टीएमपी टेबल का उल्लेख नहीं किया! – elrado

1

SQL सर्वर 2008 में, आप सिंटैक्स VALUES(...)(...)(...) का उपयोग करके व्युत्पन्न तालिकाओं को बना सकते हैं, उदा।

select v.value 
     from (
      values ('value1'),('value2'),('value3') 
      ) v(value) 
left join table1 t on t.column1 = v.value 
    where t1.column1 is null 

नोट्स:

  1. प्रत्येक (...) मान के बाद एक ही पंक्ति है, और आप एकाधिक स्तंभों हो सकता है।
  2. व्युत्पन्न तालिका के बाद v(value) तालिका के लिए दिए गए उपनाम और कॉलम नाम हैं।
  3. बायाँ शामिल हों तब भी जब रिकॉर्ड table1 में मौजूद नहीं है व्युत्पन्न तालिका v से मूल्यों रहता
  4. फिर, हम केवल अभिलेख मिलान नहीं किया जा सकता है रखने के लिए, यानी t1.column1 is null
  5. मैं पहले कॉलम में स्विच किया है v से कॉलम के चयन में। कॉलम 2 हटा दिया गया है क्योंकि यह हमेशा शून्य है
संबंधित मुद्दे