MySQL 引用同一个表的列更新表的记录

标签 mysql

我正在使用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/

相关文章:

mysql - 如何在 mysql 中从 datediff 结果中添加或减去分钟

php - 如何安全地将个人 Mac OS X 10.9.2 连接到实时服务器数据库以进行表格数据处理?

mysql - 获取记录创建日期 MySql

mysql - 访问包含冒号和连字符的 JSON key

mysql - 在没有主键的情况下编辑 MySQL 数据库中的数据

mysql - 插入前创建 'search'触发器

mysql - MySQL 中的排名函数

php - mysqli bind_param 变量数量与准备好的语句中的参数数量不匹配

php - 在 MySQL (PHP) 中插入 CURDATE() 和 CURTIME()

mysql - Laravel 查询生成器 - 使用 NOW() 和 DateFormat 时出错