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

新手上路,请多包涵

我想从 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。

原文由 Aayush Karki 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 600
2 个回答

在 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

原文由 Anuraag Veerapaneni 发布,翻译遵循 CC BY-SA 3.0 许可协议

我会使用 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

原文由 fthiella 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进