我有一个像这样的表(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中有没有办法解决这个问题,或者是制作小脚本的最佳方法?
编辑:全部谢谢
答案 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;