Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将字段复制到另一个字段的不同行中,其中id=parentID_Mysql_String_Copy_Field_Concat - Fatal编程技术网

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

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

我是mysql的新手,对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

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?对于更新,我只使用更新我的表集?呃,对不起。应该提到我想用新结果更新表。^;你能告诉我怎么更新吗?太棒了!看起来它现在工作得很好。:)谢谢!