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

Sql 检查SELECT子句中的另一个表中是否存在值,sql,postgresql,Sql,Postgresql,我想查询表1中的名称,并查找表2中是否存在名称。我有以下查询,但它似乎不起作用。有什么建议我做错了什么 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”/“unspecial”。我正在使用postgres

我想查询表1中的名称,并查找表2中是否存在名称。我有以下查询,但它似乎不起作用。有什么建议我做错了什么

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”/“unspecial”。我正在使用postgres。

在子查询中将中的替换为中的。

我将使用EXIST而不是in:

select a.name,
    case
        when a.name in (select distinct name from table2) then 'common'
        else 'not common'
    end as new
from table1 a
select
  A.name, 
  CASE
    WHEN EXISTS (select *
                 from table2 B
                 where B.name = A.name)
    THEN 'common'
    ELSE 'not common'
  END
from
  table1 A

在SELECT案例中使用子查询将花费更多。使用左连接代替,如下所示

    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

CASE
表达式中使用的suquery在语法上不正确。执行查询时会出现什么错误?在某些情况下会产生重复的值。如果我也需要从表2中的另一列(比如Date)中获取值,那么如果名称在两个表中都是通用的,则结果中应显示日期值以及“common”/“Not common”(通用)。