【问题标题】:Copy field to another field, different rows, where id = parentID将字段复制到另一个字段,不同的行,其中 id = parentID
【发布时间】:2011-06-11 19:31:10
【问题描述】:

我对 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

【问题讨论】:

  • 您与ParentId = 1 的记录不止一条?在这种情况下,您想在textcol 中记录1 是什么?
  • 我正在将数据从旧数据库导入到新数据库。所以新条目将不需要这个,因为当创建新条目时数据将输入到 textcol。所以我有一些基于 extra_textcol 部分的旧数据,我需要移动到 textcol。
  • 您没有回答问题。什么你有ParentId = 1不止一条记录?在这种情况下,您想在textcol 中记录1 是什么?
  • @Quassnoi:哦,抱歉,如果ParentID = 1 的记录不止一条,请在前一条之后添加,ASC。示例(如果 id3 有 extra_textcol = extratext3 和 parentid = 1):extratext2extratex3text1。当我尝试下面显示的查询时,我注意到它在记录之间添加了一个逗号。我猜更新不会有在前后添加我自己的输入的问题,例如'BEFORE', mp.extra_textcol, 'AFTER'。谢谢

标签: mysql string copy field concat


【解决方案1】:
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 存储引擎。

【讨论】:

  • 非常感谢。我收到一个错误,“字段列表中的列'extra_textcol'不明确”。我想我应该将其更改为 mc.extra_textcol、mp.parentID 之类的东西?对于更新,我只需要更新 mytable set .... ?
  • 呃,对不起。应该提到我想用新结果更新表。 ^^;你有机会告诉我如何进行这样的更新吗?
  • 太棒了!看起来它现在工作得很好。 :) 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多