我有两个表 A 和 B,其中存在一对多关系。
现在我想要一些来自 A 的记录,并且这个存在字段显示 B 是否有任何匹配的记录。我不想使用该count
函数,因为 B 有太多记录会延迟 SQL 执行。要么我不想使用rownum
像下面这样的 Oracle 的专有关键字,因为我需要尽可能多的兼容性。
select A.*, (
select 1 from B where ref_column = A.ref_column and rownum = 1
) existence
...
无论如何,您都会使用左连接 + 计数,选择列表中的选择语句可以执行多次,而连接只会执行一次。
您也可以考虑 EXISTS:
select A.*, case when exists (
select 1 from B where ref_column = A.ref_column and rownum = 1
) then 1 else 0 end
使用EXISTS
从句。如果 B 中的外键被索引,性能应该不是问题。
SELECT *
FROM a
WHERE EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id)