Mysql 使用select子查询将列更新到同一表
下表示例。我最近添加了“is_last_child”列,如果该行是最后一个子行(或不是父行),则希望将其更新为值1。我有一个疑问Mysql 使用select子查询将列更新到同一表,mysql,sql,sql-update,Mysql,Sql,Sql Update,下表示例。我最近添加了“is_last_child”列,如果该行是最后一个子行(或不是父行),则希望将其更新为值1。我有一个疑问 update node set is_last_child=1 where id not in (select parent_id from node); 当我运行它时,我得到以下错误。“不能在FROM子句中为更新指定目标表“节点”。我尝试过使用联接,但我确定如何只更新非父级的行。有人有什么想法或遇到过类似的情况吗 id | parent_id | is_last_
update node set is_last_child=1 where id not in (select parent_id from node);
当我运行它时,我得到以下错误。“不能在FROM子句中为更新指定目标表“节点”。我尝试过使用联接,但我确定如何只更新非父级的行。有人有什么想法或遇到过类似的情况吗
id | parent_id | is_last_child
1 | 1 | 0
2 | 1 | 0
3 | 1 | 0
4 | 2 | 0
5 | 4 | 0
6 | 1 | 0
基本上,我想选择IDS3、5和6,并将列is_last_child设置为1。这不是我的模式,有数千行,但上面的表只是为了简化事情。使用另一个子查询,因为您不能同时更新正在选择的表(在MySQL中)。但是通过建立一个临时表,它可以工作
update node
set is_last_child=1
where id not in
(
select * from
(
select parent_id from node
) tmp
);
使用另一个子查询,因为不能同时更新正在选择的表(在MySQL中)。但是通过建立一个临时表,它可以工作
update node
set is_last_child=1
where id not in
(
select * from
(
select parent_id from node
) tmp
);
您想从以下位置更新
:
UPDATE N1
SET N1.is_last_child = 1
FROM Node N1
LEFT OUTER JOIN Node N2
ON N1.ID = N2.Parent_ID
WHERE N2.ID IS NULL
左侧外部联接在概念上与使用NOT IN
相同,只是它更易于阅读,并且不需要大量嵌套查询。您想要从中更新:
UPDATE N1
SET N1.is_last_child = 1
FROM Node N1
LEFT OUTER JOIN Node N2
ON N1.ID = N2.Parent_ID
WHERE N2.ID IS NULL
左侧外部联接在概念上与使用NOT IN
相同,只是它更易于阅读,并且不需要大量嵌套查询。虽然您无法更新正在选择的表,但我认为您可以更新联接到自身的表:
UPDATE `node` AS n1 LEFT JOIN `node` AS n2 ON n1.id = n2.parent_id
SET n1.is_last_child = 1
WHERE n2.id IS NULL
;
虽然您无法更新正在选择的表,但我认为您可以更新与其自身连接的表:
UPDATE `node` AS n1 LEFT JOIN `node` AS n2 ON n1.id = n2.parent_id
SET n1.is_last_child = 1
WHERE n2.id IS NULL
;
谢谢你的帮助。你的解决方案奏效了,但我读到如果可以避免的话,不建议这样做。谢谢你的帮助。你的解决方案奏效了,但我听说如果可以避免的话就不推荐了,谢谢!这起作用了。因为我使用mysql,所以我不得不修改语法,但我最终还是成功了。谢谢!这起作用了。因为我使用的是mysql,所以我不得不修改语法,但我最终还是成功了。