将字段复制到另一个字段,不同的行,其中id = parentID

时间:2011-01-19 14:42:06

标签: mysql string copy field concat

我对mysql很陌生并且不知道那么多,从来没有我需要完成一些事情。 :)

bla bla

我正在试图弄清楚如何将字符串从一个字段连接到另一个字段的开头。在同一个表中,但行不同。使用id = parentID等的地方。 看看下面的表格,希望你能理解。

我的表:

table
id | textcol | extra_textcol | parentID
1  | 'text1' | NULL          | NULL
2  | NULL    | 'extratext2'  | 1
3  | 'text'  | NULL          | NULL

结果我想要:

table
id | textcol           | extra_textcol | parentID
1  | 'extratext2text1' | NULL          | NULL
2  | NULL              | 'extratext2'  | 1
3  | 'text'            | NULL          | NULL

那里有谁可以帮我这个?

编辑:忘了说,我想要的结果来自更新:D

1 个答案:

答案 0 :(得分:0)

SELECT  mc.id, CONCAT(COALESCE(GROUP_CONCAT(mp.extra_textcol ORDER BY id SEPARATOR ''), ''), mc.textcol) AS textcol, mc.extra_textcol, parentID
FROM    mytable mc
LEFT JOIN
        mytable mp
ON      mp.ParentID = mc.id
GROUP BY
        mc.id

要进行更新,您必须先创建一个临时表,因为MySQL不允许您在更新中使用子查询来更新表。

CREATE TABLE newtable (id INT NOT NULL PRIMARY KEY, textcol TEXT) ENGINE=Memory
AS
SELECT  mc.id, CONCAT(COALESCE(GROUP_CONCAT(mp.extra_textcol ORDER BY id SEPARATOR ''), ''), mc.textcol) AS textcol, mc.extra_textcol, parentID
FROM    mytable mc
LEFT JOIN
        mytable mp
ON      mp.ParentID = mc.id
GROUP BY
        mc.id;

UPDATE  mytable m
JOIN    newtable n
ON      m.id = n.id
SET     m.textcol = n.textcol

如果CREATE TABLE上出现内存不足错误,则必须使用MyISAM代替Memory存储引擎。