2012-04-24 18 views
7

Ben yazarsanız:değerler seçin

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

Ben listede bulunmayan tablodan girişlerini alabilirsiniz. Tersini yapmak istiyorum: Tablodaki listede olmayan değerleri alın. Örneğin, tablonun adı 'Test1' ve 'Test3' değerlerine sahip bir sütun içeriyorsa, bunu ('Test1', 'Test2', 'Test3') ile karşılaştırmak ve Test2'ye dönmek istiyorum. Veya başka bir örnek olarak, tablo boşsa, listedeki her şeyi döndürün: Test1, Test2 ve Test3.

Listedeki tüm değerleri içeren yeni bir tablo oluşturmadan bunu yapmanın bir yolu var mı?

+0

Bu geçici tablo # olmadan benim sorunu için idealdir (kahini? SQL Server?) – aquinas

+0

çıktı üretmesi verir. – Trinculo

cevap

7

Kaç değeriniz olduğuna bağlı olarak, birkaç sendika yapabilirdiniz.

bakın

: 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

Güzel sqlfiddle servisi – Anton

+2

Dün keşfettim. Oldukça kaygan. – aquinas

+0

Teşekkürler aqunias, çözümünüz güzel çalıştı. – Trinculo

0

"othertable" varsayarsak, söz konusu tabloyu tutan ...

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

Ben genellikle SELECT 'FOO' AS COL UNION SELECT 'BAR' vb kullanmak ve daha sonra sol katılma ve denetleme standart deyim kullanmak Eksik elemanları bulmak için 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 

Ben sqlite3 kullanıyorum

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 

Ne veritabanı kullandığınız