PostgreSQL:“错误:用作表达式的子查询返回多行”

zvms9eto  于 2023-03-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(301)

我需要从事件模板中删除包含在请求组1或3中的所有事件,具体取决于后者的类型。
请求字段和其中包含的模板是成对连接的(请求"id"字段-模板"from"字段),以及成对的模板-事件(模板的"id"字段-事件的"tmpid"字段)。
For clarity, I will attach a screen.
我需要从所有模板中删除与过时请求相关的所有事件(可能有几个)。
我试着这样做:

DELETE FROM
    public.events_tmp_acc
WHERE "tmpid" IN (
        SELECT "id"
        FROM public.tmp_acc
        WHERE "from" IN (
                SELECT "id" 
                FROM
                    public.events_req_form 
                WHERE
                    to_date("date", 'YYYY-MM-DD') < to_date( (
                            SELECT
                                "date"
                            FROM
                                public.events_req_form
                            WHERE
                                "isActive" = true
                        ),
                        'YYYY-MM-DD'
                    )
                    AND "isAccepted" = true
            )
    );

但我遇到了一个错误:"错误:用作表达式的子查询返回了多行"。问题出在哪里?

jdgnovmf

jdgnovmf1#

"isActive"子查询可能返回多行。解决此问题的一种可能方法是在此处也使用IN或使用EXISTS子句,如下所示(对于“from”IN之后的部分):

SELECT outdated."id" 
FROM   public.events_req_form outdated
WHERE  outdated."isAccepted" = true
AND    EXISTS (
  SELECT 1 FROM public.events_req_form active
  WHERE  active."isActive" = true
  AND    to_date(active."date", 'YYYY-MM-DD') > to_date(outdated."date", 'YYYY.MM.DD')
)

相关问题