用同一行的值更新 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)
我有一个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)