2016-07-02 2 views
1

У меня есть таблица А с некоторыми данными:Как реализовать обратное «НЕ В»?

name 
------ 
a 
b 
d 

И у меня есть список имен ('a', 'b', 'c', 'e'), из которых я хотел бы получить те ценности, которые не таблицы. Как я могу это сделать? Какие у меня варианты? Это не работает (конечно):

SELECT value FROM ('a', 'b', 'c', 'e') WHERE value NOT IN (SELECT name FROM A) 

В этом примере ожидаемый результат будет:

value 
------ 
c 
e 

ответ

2

Вы можете создать временную таблицу с union, а затем присоединиться к нему

select tmp.name 
from 
(
    select 'a' as name 
    union all 
    select 'b' 
    union all 
    select 'c' 
    union all 
    select 'e' 
) tmp 
left join your_table t on t.name = tmp.name 
where t.name is null 

Если у вас есть несколько значений, я рекомендую поместить эти значения в реальную таблицу, а затем присоединиться к ней.

+0

Я вижу. Да, у меня больше ценностей. Итак, другая таблица - это единственный вариант? – robsch

+0

Еще одна таблица - единственный реальный вариант здесь. –

0

Перейдите к приведенной ниже ссылке, вы получите функцию SPLIT, просто создайте эту функцию для будущего развития. How to split string and insert values into table in SQL Server

После этого выполните следующий запрос.

SELECT * 
into #temp 
FROM [dbo].Split('a,b,c,e', ',') 

select * from #temp where item not in (select * from A) 

drop table #temp 
Смежные вопросы