MySQL |更新查询以填充子项

标签 mysql sql database join sql-update

我有一张像这样的 table

ID | ParentID |Children| Name | Address
----------------------------------------
1  |  Null    |        | Xyz  | Home
2  |   1      |        | ABC  | Home
3  |   2      |        | DEF  | Home
4  |   3      |        | GHI  | Home
5  |   3      |        | GHI  | Home
6  |   1      |        | GHI  | Home

我需要向子项填写查询,这些是直接子项。例如 1 的 child 将是 2,3 的 child 将是 4,5

因此查询后的表格应该如下所示

ID | ParentID |Children| Name | Address
----------------------------------------
1  |  Null    |  2,6   | Xyz  | Home
2  |   1      |   3    | ABC  | Home
3  |   2      |  4,5   | DEF  | Home
4  |   3      | Null   | GHI  | Home
5  |   3      | Null   | GHI  | Home
6  |   1      | Null   | GHI  | Home

我知道我可以将 group_concat 函数与更新查询一起使用,但无法获得确切的查询。我如何使用 MySQL 查询来做到这一点?

最佳答案

您可以创建一个子查询,将其子查询的 ID 连接起来,并将其与表本身连接起来。

UPDATE  tableName a
        INNER JOIN
        (
            SELECT  a.ID, GROUP_CONCAT(b.ID) Children
            FROM    tableName a
                    INNER JOIN tableName b
                        ON a.ID = b.ParentID
            GROUP   BY a.ID
        ) b ON a.ID = b.ID
SET     a.Children = b.Children

关于MySQL |更新查询以填充子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201621/

相关文章:

MySQL 根据其他 SELECT 对 SELECT 进行排序

php - 如何从另一个表排序的mysql表中获取值?

sql - PostgreSQL SELECT、UPDATE 和 INSERT 一起

SQL Server 查询 : SELECT 1 WHERE EXISTS versus SELECT TOP 1 1

php - 删除表中的行 - MySQL、PHP、HTML

Android 类不工作

mysql - 统计一定年龄范围内使用身份证号码的人数

java - Mybatis中的foreach是硬解析还是软解析?

c++ - sqlite3 事务和 exec 调用

MySQL - 当一个表可能没有对应的行时如何在查询中合并 2 个表