检查SELECT子句中的另一个表中是否存在值

时间:2017-06-27 06:23:59

标签: sql postgresql

我想查询table1中的名称,还要查找table2中是否存在名称。我有以下查询但它似乎不起作用。有什么建议我做错了吗?

select A.name, 
       CASE WHEN A.name in (select B.name in table2 B)
       THEN 'common'
       ELSE 'not common'
       END

from table1 A

请注意,我必须从select子句本身获得“common”/“uncommon”。我正在使用postgres。

4 个答案:

答案 0 :(得分:4)

我会使用EXIST而不是IN:

select
  A.name, 
  CASE
    WHEN EXISTS (select *
                 from table2 B
                 where B.name = A.name)
    THEN 'common'
    ELSE 'not common'
  END
from
  table1 A

答案 1 :(得分:3)

在SELECT CASE中使用子查询会花费更多。使用左连接,如下面的

    select A.name, 
       CASE WHEN B.name IS NOT NULL
       THEN 'common'
       ELSE 'not common'
       END

    from table1 A
    left join table2 B
    on A.name = B.name

答案 2 :(得分:0)

只需在子查询中将in替换为from

答案 3 :(得分:0)

选择a.name,a.name中的情况(从table2中选择不同的名称)然后' common'别的'不常见'从table1 a结束为新的