1

我对 mysql 很陌生,知道的不多,但我需要完成一些事情。:)

bla bla

我试图弄清楚如何将字符串从一个字段连接到另一个字段的开头。在同一个表中,但不同的行。使用 where 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

4

1 回答 1

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存储引擎。

于 2011-01-19T14:44:31.040 回答