用同一行的值更新 table

Update a table with the value of the same row

我有一个table这样的

id     Name   Parent_id   Text
1        x      0         
2        y      1         
3        Z      1        
4        A      2         
5        B      0         

现在我想根据 parent_id 使用列名称的文本填充该列。如果 parent_id 是 0 文本值将是同一行的名称而不是 id parent_id!=0 它必须找到正确的名称

这是我想要存档的输出

id     Name   Parent_id   Text
1        x      0         x
2        y      1         x
3        z      1         x
4        a      2         y
5        b      0         b

有人可以帮我吗?

尝试:

UPDATE tablename t
SET Text = 
      CASE 
           WHEN t.Parent_id = 0 THEN t.Name
           ELSE ( SELECT t1.name FROM tablename t1
                  WHERE t1.id = t.parent_id )
      END;

首先,编写 SELECT 语句 returns 该行,以及您要分配的值。像这样:

SELECT t.id                            AS t_id
     , t.parent_id                     AS t_parent_id
     , t.name                          AS t_name
     , p.id                            AS p_id
     , p.name                          AS p_name
     , t.text                          AS t_text_old
     , IF(t.parent_id=0,t.name,p.name) AS t_text_new
  FROM tlt t
  LEFT
  JOIN tlt p
    ON p.id = t.parent_id

并非 SELECT 列表中的所有列都是必需的,但我发现检查结果以确认陈述是否正确很有帮助。

一旦 SELECT 语句开始工作,返回要分配给列的新值,将其转换为 UPDATE 语句。

用关键字 UPDATE 替换 SELECT ... FROM,并在 WHERE 子句之前添加一个 SET 子句(或者在语句末尾,如果没有没有 WHERE 子句。

UPDATE tlt t
  LEFT
  JOIN tlt p
    ON p.id = t.parent_id
   SET t.text = IF(t.parent_id=0,t.name,p.name)