MySQL用父id替换父名

时间:2011-06-24 11:52:09

标签: mysql sql database

我有一个像这样的表(t)

t.Name  t.Parent  t.Id
John    Bob       1
Frank   Bob       2
Alice   Frank     3
Tim     John      4
Lucy    Bob       5
Tim     Frank     6
...

现在我想将t.Parent字符串替换为父项的Id。在MySQL中有没有办法解决这个问题,或者是制作小脚本的最佳方法?

编辑:全部谢谢

3 个答案:

答案 0 :(得分:4)

使用父名称加入表格,然后执行交换:

UPDATE table t1 LEFT JOIN table t2 ON t2.Name = t1.Parent
SET t1.Parent = t2.Id

更新:我看到我设法编写了几乎与niktrs完全相同的语句。虽然我假设您想要交换值而不是使用新列。

答案 1 :(得分:3)

创建专栏ParentId

然后加入表格

UPDATE table t1 JOIN table t2 ON t1.parent = t2.name
SET t1.ParentId = t2.Id

答案 2 :(得分:2)

@Brendan使用已加入的更新提供了最短的解决方案。

这是一个复制数据的不同之处:

CREATE TABLE parents LIKE t;
INSERT INTO parents SELECT * FROM t;
UPDATE t SET parent=(SELECT id FROM parents WHERE name=t.parent ORDER BY id ASC LIMIT 1);

一个视图就足够了,但MySQL拒绝以这种方式使用它。

更新运行后,您可以将parent字段的类型修改为与id相同的字段:

ALTER TABLE t CHANGE parent parent integer;

当然你可以删除副本表:

DROP TABLE parents;