gpt4 book ai didi

sql - PL/pgSQL 检查一行是否存在

转载 作者:行者123 更新时间:2023-11-29 11:06:22 25 4
gpt4 key购买 nike

我正在 PL/pgSQL 中编写一个函数,我正在寻找检查行是否存在的最简单方法。
现在我正在选择一个 integer 到一个 boolean,这实际上不起作用。我对 PL/pgSQL 的经验还不够,还不知道执行此操作的最佳方法。

这是我的部分功能:

DECLARE person_exists boolean;
BEGIN

person_exists := FALSE;

SELECT "person_id" INTO person_exists
FROM "people" p
WHERE p.person_id = my_person_id
LIMIT 1;

IF person_exists THEN
-- Do something
END IF;

END; $$ LANGUAGE plpgsql;

更新 - 我现在正在做这样的事情:

DECLARE person_exists integer;
BEGIN

person_exists := 0;

SELECT count("person_id") INTO person_exists
FROM "people" p
WHERE p.person_id = my_person_id
LIMIT 1;

IF person_exists < 1 THEN
-- Do something
END IF;

最佳答案

更简单、更短、更快: EXISTS .

IF <b>EXISTS</b> (SELECT FROM people p WHERE p.person_id = my_person_id) THEN
-- do something
END IF;

查询计划程序可以在找到的第一行停止——这与 count() 不同,后者无论如何都会扫描所有(符合条件的)行。与大 table 有很大的不同。对于唯一列上的条件,差异很小:只有一行符合条件,并且有一个索引可以快速查找它。

只有存在至少一个符合条件的行才重要。 SELECT 列表可以为空——事实上,这是最短和最便宜的。 (其他一些 RDBMS 不允许主体上有空的 SELECT 列表。)

改进了 @a_horse_with_no_name's comments .

关于sql - PL/pgSQL 检查一行是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892233/

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