2013-08-02 5 views
0

두 개의 테이블이 있습니다. B.의 레코드가 존재하는지 여부에 관해서는 A와 B 나는 "SQL은 존재하는 경우 열을 변경합니다.

Table A 
ID  Title 
1  A 
2  B 
3  C 
4  D 
5  E 

Table B 
ID  Detail 
3  foo 
4  foo 
4  bar 
4  barfood 

기본적으로 내가 원하는 true 또는 false를 돌려 내 선택 쿼리의 열을 추가 할 수있는 방법을 알아 내려고 노력하고있어 SELECT ID, 제목, (존재?) FROM A "를 반환하십시오.

ID  Title  Exists 
1  A   False 
2  B   False 
3  C   True 
4  D   True 
5  E   False 

표 A의 ID 열은 항상 고유합니다. 표 B의 ID 열은 표 A의 ID와 관련하여 0, 1 또는 많은 수를 가질 수 있습니다. 나는 테이블 B의 세부 사항에 대해 신경 쓰지 않고 테이블 A의 ID와 관련된 테이블 B에 적어도 하나의 레코드가 있는지 알고 싶습니다.

저는 SQL에 익숙하며 '존재한다면'또는 다른 방법으로이를 분석하는 방법을 찾고 있었지만 찾고있는 것을 찾지 못했습니다.

답변

1

라는 이름의 열을 추가하는 경우 임시 '존재'정보를 얻을 수 있습니다 alredy added 테이블에 열이 존재 함

select a.id, a.title,Exists=(case when a.id=b.id then 'True' else 'False')  
from A a left outer join B b 
on a.id = b.id 
+0

이 확실히 올바른 방향으로 저를 얻었다. 나는 뚜렷하고 작은 서식을 추가하기 만하면되었으므로 완벽합니다. 정말 고맙습니다. – Keith

+0

도와 드리겠습니다. –

0

당신이 다음 테이블 B에 가입 떠나는 경우에 당신은 당신이 한 경우 다음이

select a.id, a.title,case when a.id=b.id then 'True' else 'False' end as Exists  
from A a left outer join B b 
on a.id = b.id 

을 시도

select a.id, a.title, 
case 
    when b.id is null then 'false' 
    else 'true' 
end 
from a 
left outer join b on a.id = b.id 
group by a.id, a.title 
1

아마도 더 효율적인 방법이있을 수 있지만 수와 case 문의 조합 트릭을 할 것입니다 :

select ID, Title, 
case when 
    (select count(1) from B where ID = A.ID) = 0 then 'False' 
else 'True' 
end as 'Exists' 
from A 

SQLFiddle link

+0

가장 빠른 답변과 가장 멋진 사용자 이름의 조합에 하나를 더한 것입니다. –

관련 문제