2016-10-06 3 views
1

에서 발견되지 않는 경우 여기 샘플 데이터표시 NULL 일부 값이 SQL

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

나는이 QUERY

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

을 실행할 때 그래서 그것은 나에게

 
id name 
---------- 
1 Test1 
3 Test3 
의 출력을 제공해야

이렇게 출력 할 수있는 방법이 있습니까

(2008 년 =>)
+0

네, 단지 값이 그 일의 깔끔한 방법입니다 – Nemeros

답변

4

당신은 table value constructors을 사용할 수있다 할 것입니다 :

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

에있는 테이블을 에뮬레이트 만 3 행을 반환 할 수 있습니다, 매일이 대단한 학교 일 – JohnHC

+0

입니다 이거 고마워! – adaam

+0

테이블 값 생성자도 훌륭했습니다. 그러나 이것보다 간단하게 생성 된 테이블에 외부 조인을 수행하는 것입니다. (그리고 당신이 정말로 건설 테이블에'ID'가 필요하지 않습니다) –

2

그것은 꽤 아니다, 그러나 CTE는 그것이

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; 

이는 일치하는 모든 ID를 열거하거나 null을 id로 반환합니다. 에 대해 알고하지 않았다 - 그런 다음

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;