MySQL self table 使用三重连接更新

MySQL self table update with triple join

我有 table 'CATEGORY' 这样的东西

| NUMBER | NAME | TITLE | UP_CATEGORY |
 -------------------------------------
|  1     | AAA  |       |      0      |
 -------------------------------------
|  2     | BBB  |       |      0      |
 -------------------------------------
|  3     | CCC  |       |      1      |
 -------------------------------------
|  4     | DDD  |       |      2      |
 -------------------------------------
|  5     | EEE  |       |      3      |
 -------------------------------------

我想在网页导航中有类似面包屑的标题(主页 > 类别 1 > 类别 2)。 在这种情况下,标题应如下所示:

AAA = AAA
BBB = BBB
CCC = CCC :: AAA
DDD = DDD :: BBB
EEE = EEE :: CCC :: AAA

在纯 MySQL 中甚至可以做到这一点吗?我搜索了 self join 但没有很好的结果。


我试过类似的方法但没有成功:

UPDATE t1 SET t1.title = t2.name
FROM category t1, category t2 WHERE t2.up_category = t1.number

我是否正在以良好的方式实现我想要的目标?

编辑:

@Alex,我不认为我的问题与 How to create a MySQL hierarchical recursive query, but in some way similar. It helped me with making a proper select to achieve what I want (using Managing Hierarchical Data in MySQL) 重复。

SELECT的代码:

SELECT CONCAT_WS(" :: ",t3.name,t2.name,t1.name), t3.number, t2.number, t1.number
FROM category AS t1
LEFT JOIN category  AS t2 ON t2.up_category = t1.number
LEFT JOIN category  AS t3 ON t3.up_category = t2.number
WHERE t1.up_category = 0

所以我现在有一个包含 4 列的结果 - 第 1 栏 - 我的专栏 'breadcrumbs' - 第二列 - 第三个 child 的 id(数字或 NULL,因为有时有 parent 而只有一个 child) - 第 3 列 - 第二个 child 的 ID(数字) - 第 4 列 - 第一个 child 的 ID(数字)

现在我正在考虑用 select 的结果更新 table,但现在我不知道如何执行此操作。

我已经做到了。解决方案如下。

UPDATE category table1, 
(
    SELECT CONCAT_WS(" :: ",t3.name,t2.name,t1.name) AS title, IF(t3.number IS NOT NULL,t3.number,IF(t2.number IS NOT NULL,t2.number,t1.number)) AS id_cat
    FROM category AS t1
    RIGHT JOIN category AS t2 ON t2.up_category = t1.number
    RIGHT JOIN category AS t3 ON t3.up_category = t2.number
 ) table2

SET table.title = table2.new_title
WHERE table1.number = table2.id_cat

我认为它涵盖了所有内容。一种或另一种方式有效,所以它很好。