2016-10-28 86 views
0

我有一个平板包含帖子和评论。目前,帖子和评论并没有真正相互关联,我只知道,评论之前(根据id列)他们相应的帖子。更新与在哪里选择

第一步改进是建立一个“commentforid”栏,并适当填充:

UPDATE mytable t 
SET t.commentforid = (SELECT x.id 
         FROM mytable x 
         WHERE x.origin = 'POST' 
         AND x.id > t.id 
         LIMIT 1) 
WHERE t.origin = 'COMMENT' 

但是,查询失败,

您不能指定目标表“T '在FROM子句中更新

有没有人知道问题是什么?我无法做出任何错误信息。

回答

1

的错误与您要更新的同桌你选择,你可以使用一个临时表

尝试使用DINAMIC从表

UPDATE mytable t 
    SET t.commentforid = (SELECT x.id 

         FROM (select z.id from mytable z 
         WHERE x.origin = 'POST') x on x.id > t.id 
         LIMIT 1) 
    WHERE t.origin = 'COMMENT' 
+0

谢谢,工作! –

+0

@ D.R。如果我的回答是正确的,请将其标记为已接受。 – scaisEdge

+0

有一个最低时间的分钟,你必须等待才能够这样做。 –

1

的错误信息是覆盖这种情况的事实挺清楚的。它告诉你,你不能从你正在更新的同一张表中获得新的价值。

为什么?

想象一下(即使是一个错误),您尝试使用相同的记录和字段值更新记录中的字段。这对你有意义吗?

+0

谢谢澄清底层问题,@scaisEdge提供了一种解决方法。 –

+0

另一种方法是(这是我更喜欢的方式,因为它使代码更易于阅读和理解):在单个select语句(这将是内部选择)中获取字段的新值,然后用户在更新语句(您的外部选择)中检索到的值。是的,我知道,有些人会不同意,但软件工程中的一个黄金法则(不幸遗忘或许多人不知道)是**你不为你写代码,但是对于其他需要阅读和理解的人它**。 – FDavidov