SQL:如何检查相关行是否存在?

标签 sql postgresql

我有第一个表和一个相关的第二个表,其中一个外键指向第一个表。

第二个表中的行数可以从零行到数百万行(时间序列数据)不等。

当向最终用户显示第一个表的行时,我想显示第二个表中是否有相关行 - 是或否,不多。

目前我离开加入表格并在第二张表格上进行计数。但我怀疑这是一种仅确定第二个表中是否存在相关行的缓慢且耗费资源的方法。

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/

相关文章:

mysql查询-统计用户之间的共同词

sql - PHPMyAdmin - 总记录数各不相同

hibernate - 在游戏中进行进化的正确方法

SQL 列引用 "id"不明确

java - 使用包含 $$ 字符的 SQLExec 执行文件

带有空子查询的 Postgresql OR 条件

sql - Postgresql - 如何在列的任何数组中查找指定字符串

mysql - 内连接语句限制在三个表之一

c# - 使用 Microsoft Visual Studio 2010 在 C# 中构建的网页的 SQL 问题

MySQL 外键错误,删除级联时