根据另一个表中存在的值在SELECT语句中设置列值

时间:2016-12-30 20:26:46

标签: sql subquery

我有2张桌子。一个表列出了我们跟踪的项目的所有记录。另一个表包含第一个表中记录的属性标志。

例如,表1有列

Tab1ID, Name, Address, Phone

表2包含这些列

Tab2ID, Tab1ID, FlagName

Tab1ID链接的Table1和Table2之间存在1对多的关系。

我想创建一个包含Table1中所有记录的查询。但是,如果Table2中的一个记录具有Flagname = Retired(具有匹配的Tab1ID),那么我想要一个" Y"显示在选择列列表中,否则为" N"。

我认为它可能看起来像这样:

Select Name, Address, Phone, (select something in table2)
from Table1
where Tab1ID > 1;

列中的子查询让我难过。

专利

2 个答案:

答案 0 :(得分:1)

您可以使用exists

Select t1.*,
       (case when exists (select 1
                          from table2 t2
                          where t2.tab1id = t1.tab1id and t2.flagname = 'Retired'
                         )
             then 'Y' else 'N'
       end) as retired_flag
from Table1 t1;

答案 1 :(得分:0)

我会做一个正常的连接返回多个记录,但是将它们转换为带有case语句的位。然后将其用作子查询并拉出每个位列的最大值。

select
    name
    ,address
    ,phone
    ,max(retired_flag)
from (
    select
        table1.name
        ,table1.address
        ,table1.phone
        ,case when table2.flagname = 'retired' then 1 else 0 end as [retired_flag]
    from table1
    left join table2
        on table1.tab1id = table2.tab1id
    where tab1id > 1
    ) tbl
group by
    name
    ,address
    ,phone