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;