【发布时间】:2015-07-26 15:23:20
【问题描述】:
我尝试制作一个脚本来输出仅由一个用户使用的所有 foo,如果一个 foo 被多个用户使用,则不应输出。
这是我的桌子
foos (id, value)
users (id, name)
used (foo_id, user_id)
我的脚本不工作
FUNCTION output_unshared_foos ()
RETURNS foos AS
$a$
DECLARE
foocounts RECORD;
BEGIN
SELECT u.foo_id, count(*)
INTO foocounts -- store in the local variable
FROM used u
GROUP BY u.foo_id;
FOR f IN SELECT * FROM foos
LOOP
IF (SELECT fc.count < 2 FROM foocounts fc WHERE fc.foo_id = f.id) THEN
RETURN NEXT f;
END IF;
END LOOP;
END
$a$ language plpgsql;
似乎不起作用,返回每一行,条件控制似乎总是为真。
【问题讨论】:
-
手工制作的表定义远不如你在 psql 中使用
\d tbl得到的有用。而且您忘记声明您的 Postgres 版本。此外,您呈现的内容在语法上是无效的,并且会产生错误消息,而不是结果。
标签: postgresql select for-loop plpgsql