我有第一个表和一个相关的第二个表,其中一个外键指向第一个表。
第二个表中的行数可以从零行到数百万行(时间序列数据)不等。
当向最终用户显示第一个表的行时,我想显示第二个表中是否有相关行 - 是或否,不多。
目前我离开加入表格并在第二张表格上进行计数。但我怀疑这是一种仅确定第二个表中是否存在相关行的缓慢且耗费资源的方法。
SELECT
first.id,
first.title,
Count( second.id ) as count
FROM
first
LEFT JOIN
second
ON
first.id = second.first_id
GROUP BY
first.id
ORDER BY
count DESC
两个表的主键 id
都有索引。数据库是 PostgrSQL。
什么是更快和/或更少资源消耗的方式?
最佳答案
我会用标量子选择而不是连接来做到这一点:
select f.*,
exists (select * from second s where s.first_id = f.id) as rows_in_second_exists
from first
exists
运算符将在找到行后立即停止查看第二个表。 second (first_id)
上的索引会加快速度。
关于SQL:如何检查相关行是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61673619/