请帮忙!
count_rate :=
(
SELECT COUNT(trate.rid) AS count_rate
FROM tlot LEFT JOIN trate ON trate.ridlot = tlot.lid
GROUP BY tlot.lid
);
充分:
CREATE FUNCTION editstatuswait()
RETURNS void
LANGUAGE plpgsql
AS $$
DECLARE count_rate INTEGER;
BEGIN
count_rate := (SELECT COUNT(trate.rid) AS count_rate FROM tlot LEFT JOIN trate ON trate.ridlot = tlot.lid GROUP BY tlot.lid);
IF (count_rate != 0) THEN
UPDATE tlot SET lstatus = 3
WHERE tlot.lexpirationdate < NOW()
AND tlot.lexpirationdate > NOW()-INTERVAL '24 hours' AND tlot.lstatus = 2;
ELSE
UPDATE tlot SET lstatus = 0
WHERE tlot.lexpirationdate < NOW()
AND tlot.lexpirationdate > NOW()-INTERVAL '24 hours' AND tlot.lstatus = 2;
END IF;
END;
$$;
错误:[21000]错误:用作表达式的子查询返回的多行Где:SQL语句
SELECT (SELECT COUNT(trate.rid) AS count_rate FROM tlot LEFT JOIN trate ON trate.ridlot = tlot.lid GROUP BY tlot.lid
我无法理解如何摆脱这个错误......
解决方案取决于您要实现的目标。
变量只能包含单个值,因此您尝试存储在count_rate
中返回多行的子选择的结果将失败。
您必须提出一个最多返回一行的子选择(如果它不返回任何行,则将为该变量分配NULL)。
ORDER BY
),您可以将LIMIT 1
附加到查询中。tlot.lid
的计数,你应该使用WHERE tlot.lid = ...
而不是GROUP BY
。FOR count_rate IN SELECT ... LOOP
...
END LOOP;
删除GROUP BY
:
count_rate := (SELECT COUNT(trate.rid) AS count_rate FROM tlot LEFT JOIN trate ON trate.ridlot = tlot.lid);
当然,这可能不符合您的意图。它至少会修复错误。