sql - 如何检查集合中是否有每个 id 的行?

标签 sql postgresql exists

我有一组ids。例如,12、3、6、10。我需要检查这些 ids 中的每一个是否都存在(实际上,我有复杂的 WHERE 条件,但这并不重要)。

因此,我可以执行 N 个查询,如下所示:

SELECT 1 FROM tbl WHERE id=12;
SELECT 1 FROM tbl WHERE id=3;
SELECT 1 FROM tbl WHERE id=6;
SELECT 1 FROM tbl WHERE id=10;

或者我可以执行一个查询,但它包含缓慢的 GROUP BY 和 COUNT(*):

SELECT id, COUNT(*)
WHERE id IN (12, 3, 6, 10)
GROUP BY id

是否有更快速的方法来检查是否存在具有某些WHERE 条件 的所有行,而无需使用GROUP BY

最佳答案

GROUP BY 应该没问题。但是,我建议为此使用 DISTINCT ON:

SELECT DISTINCT ON (id) id, 1
WHERE id IN (12, 3, 6, 10)
ORDER BY id;

关于sql - 如何检查集合中是否有每个 id 的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58208431/

相关文章:

postgresql - 如何将 uuid 与 postgresql gist 索引类型一起使用?

Java - 检查嵌套在 HashMap 中的 ArrayList 中的值是否存在

ruby-on-rails - Rails、IE、PostgreSQL、delayed_job 的奇怪 UTF-8 字节编码问题

postgresql - npgsql 3.0 : creating database through C# code

sql - plpgsql 语法错误

mongodb - 为什么 mongo 计数不加起来?

c# - SQL Express 连接字符串 : mdf file location relative to application location

php - 尝试在数据库中插入记录时 SQL 查询错误

Java 程序将表转储为一组插入语句

sql - DB2:多个表之间的外键约束