gpt4 book ai didi

sql - 如何在 postgresql 中对未知数量的 bool 值执行 AND?

转载 作者:行者123 更新时间:2023-11-29 11:20:39 24 4
gpt4 key购买 nike

我有一个带有外键和 bool 值的表(以及一堆与此处无关的其他列),如下所示:

CREATE TABLE myTable
(
someKey integer,
someBool boolean
);

insert into myTable values (1, 't'),(1, 't'),(2, 'f'),(2, 't');

每个 someKey 可以有 0 个或多个条目。对于任何给定的 someKey,我需要知道是否 a) 所有条目都为真,或 b) 任何条目为假(基本上是 AND)。

我想出了以下函数:

CREATE FUNCTION do_and(int4) RETURNS boolean AS
$func$
declare
rec record;
retVal boolean = 't'; -- necessary, or true is returned as null (it's weird)
begin
if not exists (select someKey from myTable where someKey = $1) then
return null; -- and because we had to initialise retVal, if no rows are found true would be returned
end if;

for rec in select someBool from myTable where someKey = $1 loop
retVal := rec.someBool AND retVal;
end loop;

return retVal;
end;
$func$ LANGUAGE 'plpgsql' VOLATILE;

... 给出正确的结果:

select do_and(1) => t
select do_and(2) => f
select do_and(3) => null

我想知道是否有更好的方法来做到这一点。在这个简单的场景中它看起来并不太糟糕,但是一旦包含所有支持代码,它就会变得比我想要的更长。我看过将 someBool 列转换为数组并使用 ALL 构造,但我无法让它工作......有什么想法吗?

最佳答案

无需重新定义 PostgreSQL 已经提供的函数:bool_and () 将完成工作:

select bool_and(someBool)
from myTable
where someKey = $1
group by someKey;

(抱歉,现在无法测试)

关于sql - 如何在 postgresql 中对未知数量的 bool 值执行 AND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/683842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com