使用同一行的值更新表

3 mysql inner-join left-join sql-update

我有一张这样的桌子

id     Name   Parent_id   Text
1        x      0         
2        y      1         
3        Z      1        
4        A      2         
5        B      0         
Run Code Online (Sandbox Code Playgroud)

现在我想根据parent_id 使用列名称的文本填充该列。如果parent_id为0文本值将是同一行的名称而不是idparent_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
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我吗?

spe*_*593 5

首先,编写一条返回行以及要分配的值的 SELECT 语句。像这样的东西:

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
Run Code Online (Sandbox Code Playgroud)

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

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

将 替换SELECT ... FROM为关键字UPDATE,并在子句SET之前添加一个子句WHERE(如果没有子句,则在语句末尾添加子句)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)
Run Code Online (Sandbox Code Playgroud)