Скопировать поле в другое поле, разные строки, где id = parentID - PullRequest
1 голос
/ 19 января 2011

Я довольно новичок в MySQL и не знаю так много, тем не менее, мне нужно, чтобы сделать некоторые вещи.:)

bla bla

Я пытаюсь выяснить, как объединить строку из одного поля в начало другого.В одной таблице, но в разных строках.Используя где 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

1 Ответ

0 голосов
/ 19 января 2011
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 механизма хранения.

...