sql - Oracle:检查其他表中是否存在行

标签 sql database oracle join exists

我有一个连接多个表并返回相当多列的查询。

另一个表的索引列引用了其中一个连接表的主键。现在我想在查询中添加另一列,说明新表中是否至少存在一个具有该 ID 的行。

所以如果我有一张旧 table

ID
 1
 2
 3

和新表

REF_ID
1
1
1
3

然后我想得到

ID   REF_EXISTS
 1            1
 2            0
 3            1

我可以想到几种方法来做到这一点,但最优雅/最有效的方法是什么?


编辑 我测试了在旧表中提供 50.000 条记录的查询的性能,每条记录与新表中的两行匹配,因此一半记录的 REF_EXISTS=1。

我将平均结果添加为对答案的评论,以防有人感兴趣。谢谢大家!

最佳答案

另一种选择:

select O.ID
    , case when N.ref_id is not null then 1 else 0 end as ref_exists
from old_table o
left outer join (select distinct ref_id from new_table) N
   on O.id = N.ref_id

关于sql - Oracle:检查其他表中是否存在行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917089/

相关文章:

sql - 在 Sql Server 2012 中使用特定表的存储过程重建执行计划

sql - 如何删除列中的非字母数字字符?

database - 空值不是唯一的

php - 保存数据库连接详细信息

mysql - 在 PGSQL 中模拟 MySQL 的 substring_index()

php - SQL 多重更新语句

sql-server - 灾难恢复 - 在没有 MDF 的情况下恢复 SQL Server 数据库

sql - Oracle 默认时间戳格式

sql - Oracle 是否有内置函数可以按特定顺序连接多个字段?

python cx_Oracle Bind非法变量名