Mysql 将字段复制到另一个字段的不同行中,其中id=parentID
我是mysql的新手,对mysql了解不多,但我需要做的事情永远不会少。:)Mysql 将字段复制到另一个字段的不同行中,其中id=parentID,mysql,string,copy,field,concat,Mysql,String,Copy,Field,Concat,我是mysql的新手,对mysql了解不多,但我需要做的事情永远不会少。:) bla-bla 我试图找出如何将字符串从一个字段连接到另一个字段的开头。在同一个表中,但在不同的行中。使用where id=parentID等。 看看我下面的表格,希望你能理解 我的桌子: table id | textcol | extra_textcol | parentID 1 | 'text1' | NULL | NULL 2 | NULL | 'extratext2' | 1 3
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
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
存储引擎。您有多条记录且ParentId=1
?在这种情况下,对于记录1
,您希望在textcol
中显示什么?我正在将数据从旧数据库导入新数据库。因此,新条目不需要这样做,因为在创建新条目时,数据将被输入到textcol。所以我有一些旧数据是基于我需要转移到textcol的额外的textcol的部分。你没有回答这个问题。您有多条记录,且父ID=1?在这种情况下,对于记录1
,您希望在textcol
中显示什么?@Quassnoi:哦,对不起,如果有多条记录的ParentID=1
,请将其添加到上一条记录之后,即ASC。示例(如果id3有额外的\u textcol=extractext3和parentid=1):extractext2extratex3text1
。当我尝试下面显示的查询时,我注意到它在记录之间添加了一个逗号。我猜在更新之前和之后添加我自己的输入不会有问题,例如'BEFORE',mp.extra\u textcol',after'
。非常感谢你。但我得到了一个错误,“字段列表中的'extra_textcol'列不明确”。我想我应该把它改成mc.extra\u textcol,mp.parentID?对于更新,我只使用更新我的表集?呃,对不起。应该提到我想用新结果更新表。^;你能告诉我怎么更新吗?太棒了!看起来它现在工作得很好。:)谢谢!