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

Aay*_*rki 3 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
Run Code Online (Sandbox Code Playgroud)

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

fth*_*lla 7

我将使用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
Run Code Online (Sandbox Code Playgroud)


Anu*_*eni 6

在 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
Run Code Online (Sandbox Code Playgroud)

  • 在某些情况下它会产生重复的值。 (3认同)