2016-10-06 4 views
1

У меня есть образец данных здесьDisplay NULL если какое-то значение не найдено в SQL

 
id name 
---------- 
1 Test1 
2 Test2 
3 Test3 
4 Test4 

Так что, когда я выполнить этот запрос

select id,name from table1 where name IN ('Test1','Test3','Test5') 

Это дает мне выход

 
id name 
---------- 
1 Test1 
3 Test3 

Есть ли способ получить такой выход

 
id  name 
---------- 
1  Test1 
3  Test3 
null Test5 
+0

да, просто эмулировать таблицу с значений – Nemeros

ответ

4

Вы можете использовать table value constructors (> = 2008):

SELECT CASE WHEN EXISTS(SELECT 1 
        FROM table1 t 
        WHERE E.Name = t.Name) 
      THEN E.Id 
      ELSE NULL END AS Id, 
     Name 
FROM (VALUES(1,'Test1'),(3,'Test3'),(5,'Test5')) E(Id,Name) 
+0

Это отличный способ сделать это, каждый день школьный день – JohnHC

+0

Это здорово - не знал о это так спасибо! – adaam

+0

Конструкторы табличных значений были удивительным дополнением. Но проще, чем просто сделать внешнее соединение с построенной таблицей. (и вам действительно не нужно 'id' в построенной таблице) –

2

Это не красиво, но ОТВ будет делать это

with MyData as 
(
    select 'Test1' as MyName 
    union 
    select 'Test3' as MyName 
    union 
    select 'Test5' as MyName 
) 
select MyData.MyName, T1.id 
from MyData 
left join Table1 T1 
on T1.Name = MyData.MyName 
1

Конечно использовать конструктор значений таблицы с внешним соединением:

Select o.id, m.name 
    from (VALUES ('Test1'), ('Test3'), ('Test5')) t(name) 
     left join myData o 
     on o.name = t.name 
0

Только что присоединились к таблице «Test1», «Test3», «Test5» к рассматриваемой таблице

select id,t.name 
from 
(
    select 'Test1' as Name 
    union 
    select 'Test3' as Name 
    union 
    select 'Test5' as Name 
) t 
left join table1 on t.Name = table1.Name; 

Это будет перечислять все соответствующие идентификаторы или возвращать null как id. Вы можете вернуть только 3 строки, то

select max(id) -- min(id) 
    , t.name 
from 
(
    select 'Test1' as Name 
    union 
    select 'Test3' as Name 
    union 
    select 'Test5' as Name 
) t 
left join table1 on t.Name = table1.Name 
group by t.name; 
Смежные вопросы