使用同一行的值更新表

时间:2016-03-26 18:06:57

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

我有一张这样的表

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

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

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

@echo off
setlocal

echo blah | findstr bin > NUL
echo %ERRORLEVEL% or !errorlevel!
for /f %%i in ('cmd /c echo blah') do (
    echo %%i | findstr bin > NUL
    call echo %%errorlevel%%
)

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

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

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 ... FROM,并在UPDATE子句之前立即添加SET子句(如果没有&#39,则在语句末尾添加WHERE子句; ta 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)

答案 1 :(得分:1)

尝试:

map.values().asList()