【问题标题】:How to check, that there are rows with each id from set?如何检查集合中的每个 id 是否存在行?
【发布时间】:2019-10-02 19:48:12
【问题描述】:

我有一组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 and COUNT(*)

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

是否有更快速的方法来检查所有带有一些WHERE condition 的行是否存在,而不使用GROUP BY

【问题讨论】:

    标签: sql postgresql exists


    【解决方案1】:

    GROUP BY 应该没问题。但是,我会为此推荐DISTINCT ON

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

    【讨论】:

    • 哦,我不知道DISTINCT ON。谢谢!你能解释一下,为什么你SELECT ... 1
    • @Max 。 . . 1 由您的问题中的查询返回。
    猜你喜欢
    • 1970-01-01
    • 2016-05-20
    • 2015-02-13
    • 2015-07-17
    • 1970-01-01
    • 2019-01-21
    • 2018-02-27
    • 2018-08-11
    • 1970-01-01
    相关资源
    最近更新 更多