如果存在,SQL会更改列

时间:2013-08-02 15:50:24

标签: sql if-statement exists

我有两张桌子。 A和B.我试图找出一种方法来在我的select查询中添加一个返回true或false的列,以确定B中是否存在记录。

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

我想基本上“选择ID,标题,(存在?)从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相关联。我不关心表B中的细节,我只想知道表B中是否至少有一条记录与表A的ID有关。

我是SQL的新手,我一直在寻找使用'if exists'或其他任何方法来解析它的方法,但我并没有真正找到我正在寻找的东西。

3 个答案:

答案 0 :(得分:1)

如果您要添加名为“Exists”的列临时,请尝试此

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

如果你已经将Exists列添加到表中,那么

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

答案 1 :(得分:1)

可能有更有效的方法来实现它,但count和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

答案 2 :(得分:0)

如果您离开加入表B,那么您将获得该信息

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