PostgreSQL 检查给定列表中的值是否存在于 table
PostgreSQL check if values in a given list exist in a table
在 Postgres 中给出如下 table:
id
some_col
1
a
1
b
2
a
3
a
我希望输出为 id 和 true(如果 table 中至少有一行具有该 id)或 false(如果在 [=32= 中没有找到具有该 id 的行) ]).
例如 (1, 2, 3, 4, 5) 中的 id:
id
value
1
true
2
true
3
true
4
false
5
false
我尝试了 group by 和 case with conditions,但是有什么 optimized/performance SQL 方法可以实现吗? Bcz,groupby
会计算完整的行数,这在这种情况下是不必要的。而且,对于 exists
查询,我没有找到处理多行的方法 return;
提前致谢!
in
子句不会这样做。您需要以某种方式构建一个值列表(values
table 值构造函数适用于大多数 rdbms)并与之外部连接:
SELECT x.id, EXISTS (
SELECT *
FROM t
WHERE t.id = x.id
) AS value
FROM (VALUES (1), (2), (3), (4), (5)) AS x(id)
在 Postgres 中给出如下 table:
id | some_col |
---|---|
1 | a |
1 | b |
2 | a |
3 | a |
我希望输出为 id 和 true(如果 table 中至少有一行具有该 id)或 false(如果在 [=32= 中没有找到具有该 id 的行) ]).
例如 (1, 2, 3, 4, 5) 中的 id:
id | value |
---|---|
1 | true |
2 | true |
3 | true |
4 | false |
5 | false |
我尝试了 group by 和 case with conditions,但是有什么 optimized/performance SQL 方法可以实现吗? Bcz,groupby
会计算完整的行数,这在这种情况下是不必要的。而且,对于 exists
查询,我没有找到处理多行的方法 return;
提前致谢!
in
子句不会这样做。您需要以某种方式构建一个值列表(values
table 值构造函数适用于大多数 rdbms)并与之外部连接:
SELECT x.id, EXISTS (
SELECT *
FROM t
WHERE t.id = x.id
) AS value
FROM (VALUES (1), (2), (3), (4), (5)) AS x(id)