1

私は 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

これで私を助けてくれる人はいますか?

編集:言うのを忘れました、私が望む結果はUPDATEからのものです:D

4

1 に答える 1

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を使用する必要があります。MyISAMMemory

于 2011-01-19T14:44:31.040 に答える