2012-04-24 16 views
7

अगर मैं टाइप करें:मान चुनें

SELECT name FROM table WHERE name NOT IN ('Test1','Test2','Test3'); 

मैं मेज से प्रविष्टियों को सूची में नहीं हैं मिल सकता है। मैं इसके विपरीत करना चाहता हूं: तालिका में मौजूद सूची से मूल्य प्राप्त करें। उदाहरण के लिए, यदि तालिका में नाम का नाम है जिसमें 'टेस्ट 1' और 'टेस्ट 3' मान हैं, तो मैं इसकी तुलना ('टेस्ट 1', 'टेस्ट 2', 'टेस्ट 3') से करना चाहता हूं और टेस्ट 2 लौटा सकता हूं। या एक और उदाहरण के रूप में, यदि तालिका खाली है, तो सूची में सब कुछ वापस करें: टेस्ट 1, टेस्ट 2, और टेस्ट 3।

क्या सूची में सभी मूल्यों के साथ एक नई तालिका बनाने के बिना ऐसा करने का कोई तरीका है?

+0

क्या डेटाबेस का उपयोग कर रहे यह बिना अस्थायी तालिका # मेरी समस्या लिए एकदम सही है (ओरेकल? एसक्यूएल सर्वर?) – aquinas

+0

मैं sqlite3 उपयोग कर रहा हूँ देता है। – Trinculo

उत्तर

7

आपके कितने मूल्यों के आधार पर, आप कुछ संघों को कर सकते हैं।

देखें: http://www.sqlfiddle.com/#!5/0e42f/1

select * from (
    select 'Test 1' thename union 
    select 'Test 2' union 
    select 'Test 3' 
) 
where thename not in (select name from foo) 
+2

नाइस sqlfiddle सेवा – Anton

+2

मैंने कल इसे खोजा। यह बहुत चिकना है। – aquinas

+0

धन्यवाद अकुनीस, आपका समाधान अच्छी तरह से काम किया। – Trinculo

0

"othertable" यह मानते हुए सवाल में धारण तालिका ...

select a.value from 
    (select 'test1' value 
    union 
    select 'test2' value 
    union 
    select 'test3' value) a 
     left outer join othertable b 
     on a.value=b.value 
     where b.value is null 
1

मैं आमतौर पर SELECT 'FOO' AS COL UNION SELECT 'BAR' आदि का उपयोग करें और फिर बाएं में शामिल होने और के लिए जाँच के मानक मुहावरा का उपयोग गायब तत्व खोजने के लिए NULL

CREATE TABLE #YourTable(
name nvarchar(50) 
) 

insert into #YourTable (name) values ('Test1'), ('Test3') 

-- ALL 
select * from #YourTable 

--MISSING 
select t1.* from (
    select 'Test1' testName 
    union select 'Test2' 
    union select 'Test3') as t1 
    left outer join #YourTable yt on t1.testName = yt.name 
    where yt.name is null 

DROP TABLE #YourTable 

उत्पादन

name 
-------------------------------------------------- 
Test1 
Test3 

(2 row(s) affected) 

testName 
-------- 
Test2 

(1 row(s) affected) 
1
Select a.value from (
SELECT 'testvalue' value UNION 
SELECT 'testvalue2' value UNION 
SELECT 'testvalue3' value UNION 
SELECT 'testvalue4' value UNION 
) a 
left outer join othertable b 
on a.value=b.value 
where b.value is null 

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