我正在尝试为我的数据库编写一个小的触发器,但出现错误:

SQLException:您不能在FROM子句中指定目标表“ p”进行更新

我正在使用的查询是:

create trigger CheckVendibilitaPP
after update on hotel
for each row
    if (old.IN_VENDITA=true and new.IN_VENDITA=false) then
    update pacchettopreconfigurato as p
    set IN_VENDITA=false
    where p.id_pp in (select p2.id_pp
                      from pacchettopreconfigurato as p2 join hotel as h on p2.DESTINAZIONE_PACCHETTO = h.LUOGO
                      where h.id = new.id)
                 and (select count(*)
                      from pacchettopreconfigurato as p3 join hotel as h2 on p3.DESTINAZIONE_PACCHETTO = h2.LUOGO
                      where p3.id_pp = p.id_pp) > 0;
end if;;


我看到了一些有关共通问题的答案,并尝试了此处显示的某些技术,但这些方法均无效。将查询的第一部分包装在“ SELECT id_pp FROM(select ...)AS c”块中,但这也不起作用。

我应该如何重写查询,以使其停止引发错误?

最佳答案

MySQL文档说:


  当前,您无法更新表并从中的同一表中选择
  子查询


参见倒数第二行here

您可以做的是分别运行两个子查询,然后将它们的结果放入变量中。然后用变量代替UPDATE语句中的suq查询。

关于mysql - SQLException:您不能在FROM子句中指定目标表“p”进行更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21337844/

10-10 21:45