我正在使用MySQL 5.6.17
。
我有一个自引用
表TableA
,其中包含列id (PK)
、title (varchar)
,type (varchar)
,parent_id(引用同一个表的id的外键)
。
样本数据如下:
id title type parent_id
1 abc G NULL
2 def G NULL
3 xyz G NULL
4 pqr G NULL
5 abc T NULL
6 def T NULL
7 xyz T NULL
8 pqr T NULL
现在,我希望每条具有 type='G'
的记录都应成为具有 type='T'
具有相同标题的记录的子记录
。
所以结果表数据应该是:
id title type parent_id
1 abc G 5
2 def G 6
3 xyz G 7
4 pqr G 8
5 abc T NULL
6 def T NULL
7 xyz T NULL
8 pqr T NULL
我尝试过以下查询:
UPDATE TableA
SET parent_id = (SELECT id FROM ( SELECT id FROM TableA WHERE TYPE='T' ) d)
WHERE TYPE='G';
但它返回
Error Code: 1242
Subquery returns more than 1 row
我也尝试过:
UPDATE TableA t1
SET t1.parent_id = t2.newlocalid
INNER JOIN (
SELECT title, id AS newlocalid
FROM TableA t2
WHERE TYPE='T'
) t2 ON t1.title = t2.title
WHERE t1.type='G'
但它也会返回语法错误。
谁能帮我实现这个目标吗?
最佳答案
UPDATE TABLEA a
JOIN TABLEA b ON a.title = b.title and a.type='G'and b.type='T'
SET a.parent_id = b.id
关于MySQL 引用同一个表的列更新表的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27147452/