【问题标题】:Update a table with the value of the same row使用同一行的值更新表
【发布时间】:2016-03-26 18:06:57
【问题描述】:

我有一张这样的桌子

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

有人可以帮我吗?

【问题讨论】:

    标签: mysql sql-update left-join inner-join


    【解决方案1】:

    首先,编写一个返回行的 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
    

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

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

    SELECT ... FROM 替换为关键字UPDATE,并在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)
    

    【讨论】:

      【解决方案2】:

      试试:

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        • 2023-01-11
        • 2018-06-16
        • 1970-01-01
        • 2015-05-19
        • 2018-09-06
        • 1970-01-01
        相关资源
        最近更新 更多