Mysql 更新子选择中的位置
我有一张包含帖子和评论的平面表格。目前,帖子和评论之间并没有真正的联系,我只知道,评论就在它们相应的帖子之前(就id列而言) 改进的第一步是创建“commentforid”列并适当填充:Mysql 更新子选择中的位置,mysql,Mysql,我有一张包含帖子和评论的平面表格。目前,帖子和评论之间并没有真正的联系,我只知道,评论就在它们相应的帖子之前(就id列而言) 改进的第一步是创建“commentforid”列并适当填充: UPDATE mytable t SET t.commentforid = (SELECT x.id FROM mytable x WHERE x.origin = 'POST'
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'
但是,查询失败
无法在FROM子句中为update指定目标表“t”
有人知道问题出在哪里吗?我无法从错误消息中看出任何信息。此错误与您正在更新所选的同一个表有关。您可以使用临时表覆盖此情况 试着用桌上的迪那米克
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'
该错误与您正在更新所选的同一个表有关。您可以使用临时表覆盖这种情况 试着用桌上的迪那米克
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语句中获取字段的新值(这将是内部select),然后在update语句中使用检索到的值(外部选择)。是的,我知道,有些人可能不同意,但软件工程的黄金法则之一(不幸被许多人遗忘或不知道)是,你不为自己编写代码,而是为其他可能需要阅读和理解代码的人编写代码。感谢你澄清了根本问题,@scaisEdge提供了一个解决方法。另一种方法是(这是我更喜欢的方式,因为它使代码更易于阅读和理解):在单个select语句(即内部select)中获取字段的新值,然后在update语句(您的外部select)中使用检索到的值。是的,我知道,有些人会不同意,但这是软件工程的黄金规则之一(不幸被许多人遗忘或不知道)是您不为自己编写代码,而是为其他可能需要阅读和理解代码的人编写代码。在能够这样做之前,您至少需要等待几分钟。@DR.Thank.。我没有在评论中查看时间。。无论如何,非常感谢您在能够这样做之前,您至少需要等待几分钟。@DR.Thank…我没有在评论中看时间…无论如何,非常感谢