postgresql 出错
Error to postgresql
请帮忙!
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;
$$;
ERROR: [21000] ERROR: more than one row returned by a subquery used as an expression Где: SQL statement
SELECT (SELECT COUNT(trate.rid) AS count_rate FROM tlot LEFT JOIN trate ON trate.ridlot = tlot.lid GROUP BY tlot.lid
我不明白如何摆脱这个错误...
删除 GROUP BY
:
count_rate := (SELECT COUNT(trate.rid) AS count_rate FROM tlot LEFT JOIN trate ON trate.ridlot = tlot.lid);
当然,这可能不是您想要的。它至少会修复错误。
解决方案将取决于您要实现的目标。
一个变量只能包含一个值,因此您尝试在 count_rate
中存储 returns 多行的子选择结果注定会失败。
你必须想出一个子选择,最多 returns 一行(如果它 returns 没有行,NULL 将分配给变量)。
如果您只对第一行感兴趣(不太可能,因为没有 ORDER BY
),您可以将 LIMIT 1
附加到查询。
如果您只想要某个 tlot.lid
的计数,您应该使用 WHERE tlot.lid = ...
而不是 GROUP BY
.
如果你想处理多个结果,你可以使用这样的结构:
FOR count_rate IN SELECT ... LOOP
...
END LOOP;
请帮忙!
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;
$$;
ERROR: [21000] ERROR: more than one row returned by a subquery used as an expression Где: SQL statement
SELECT (SELECT COUNT(trate.rid) AS count_rate FROM tlot LEFT JOIN trate ON trate.ridlot = tlot.lid GROUP BY tlot.lid
我不明白如何摆脱这个错误...
删除 GROUP BY
:
count_rate := (SELECT COUNT(trate.rid) AS count_rate FROM tlot LEFT JOIN trate ON trate.ridlot = tlot.lid);
当然,这可能不是您想要的。它至少会修复错误。
解决方案将取决于您要实现的目标。
一个变量只能包含一个值,因此您尝试在 count_rate
中存储 returns 多行的子选择结果注定会失败。
你必须想出一个子选择,最多 returns 一行(如果它 returns 没有行,NULL 将分配给变量)。
如果您只对第一行感兴趣(不太可能,因为没有
ORDER BY
),您可以将LIMIT 1
附加到查询。如果您只想要某个
tlot.lid
的计数,您应该使用WHERE tlot.lid = ...
而不是GROUP BY
.如果你想处理多个结果,你可以使用这样的结构:
FOR count_rate IN SELECT ... LOOP ... END LOOP;