1

我有两个表 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
...
4

2 回答 2

1

无论如何,您都会使用左连接 + 计数,选择​​列表中的选择语句可以执行多次,而连接只会执行一次。

您也可以考虑 EXISTS:

select A.*, case when exists (
    select 1 from B where ref_column = A.ref_column and rownum = 1
) then 1 else 0 end
于 2010-03-10T09:24:14.830 回答
0

使用EXISTS从句。如果 B 中的外键被索引,性能应该不是问题。

SELECT *
FROM a
WHERE EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id)
于 2010-03-10T09:13:54.837 回答