更新与在哪里选择
我有一个平板包含帖子和评论。目前,帖子和评论并没有真正相互关联,我只知道,评论之前(根据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子句中更新
有没有人知道问题是什么?我无法做出任何错误信息。
的错误与您要更新的同桌你选择,你可以使用一个临时表
尝试使用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'
的错误信息是覆盖这种情况的事实挺清楚的。它告诉你,你不能从你正在更新的同一张表中获得新的价值。
为什么?
想象一下(即使是一个错误),您尝试使用相同的记录和字段值更新记录中的字段。这对你有意义吗?
谢谢澄清底层问题,@scaisEdge提供了一种解决方法。 –
另一种方法是(这是我更喜欢的方式,因为它使代码更易于阅读和理解):在单个select语句(这将是内部选择)中获取字段的新值,然后用户在更新语句(您的外部选择)中检索到的值。是的,我知道,有些人会不同意,但软件工程中的一个黄金法则(不幸遗忘或许多人不知道)是**你不为你写代码,但是对于其他需要阅读和理解的人它**。 – FDavidov
谢谢,工作! –
@ D.R。如果我的回答是正确的,请将其标记为已接受。 – scaisEdge
有一个最低时间的分钟,你必须等待才能够这样做。 –