2011-01-19 88 views
1

我對MySQL非常陌生,並且不知道那麼多,從來就不是我需要做的一些事情。 :)將字段複製到另一個字段,不同的行,其中id = parentID

bla bla

我試圖找出如何從一個領域Concat的字符串,以初現端倪。在同一張表中,但行數不同。使用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 

任何人在那裏誰可以幫我嗎?

編輯:忘了說了,結果我想是從UPDATE:d

+0

你有多少條記錄'ParentId = 1`?在這種情況下,你想在'textcol'中記錄'1'嗎? – Quassnoi 2011-01-19 14:47:29

+0

我正在將數據從舊數據庫導入到新數據庫。 因此,新條目不需要這樣做,因爲當新條目創建時數據將被輸入到textcol。 所以我已經有了基於部分extra_textcol的舊數據,我需要將其移至textcol。 – beholder 2011-01-19 14:52:31

回答

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

相關問題