1

値をマージして重複レコードを削除するにはどうすればよいですか?

id(整数pmキー)、val1(テキスト)、val2(テキスト)のテーブルがあります。

現在の状況:

------------------

 id  val1    val2

 1.  john     sam
 2.  larry    tom
 3.  john     joe

私が欲しい:

---------------

 id  val1    val2

 1.  john     sam, joe
 2.  larry    tom
...

ご助力ありがとうございます。

4

4 に答える 4

2

私の知る限り、これを行うことはできません。1つのクエリでUPDATE行うことはできません。DELETEただし、これは2つとして実行でき、次のようUPDATEにクエリを実行できます。DELETE

UPDATE Table1 t1
INNER JOIN
(
  SELECT val1, GROUP_CONCAT(val2 SEPARATOR ',') Val2
  FROM Table1
  GROUP BY val1
) t2 ON t1.val1 = t2.val1
SET t1.val2 = t2.val2;

DELETE t
FROM table1 t
WHERE id NOT IN
(
  SELECT ID
  FROM
  (
    SELECT MIN(ID) id, val1
    FROM table1
    GROUP BY val1
   ) sub
 );

これにより、必要な変更が加えられます。

注:これら2つのクエリを1つのトランザクションに入れる必要があります。

SQLフィドルデモ

これらの2つのクエリにより、テーブルは次のようになります。

| ID |  VAL1 |    VAL2 |
------------------------
|  1 |  john | sam,joe |
|  2 | larry |     tom |
于 2012-12-16T14:03:39.503 に答える
1

あなたはこれを使うことができます

   SELECT val1, GROUP_CONCAT(val2 SEPARATOR ',') val2  FROM your_table t1
   INNER JOIN your_table t2 ON  t2.id = t1.id

     WHERE t2.val1 = t1.val1

  GROUP BY  t1.val1
于 2012-12-16T14:01:43.063 に答える
1

これがアイデアのスケッチです:

1)次のような一時テーブルを作成します。

select val1, min(id) min_id, group_concat(val2) val2
from table
group by val1

2)id=temp.min_idのレコードのval2を更新します

3)val1 = temp.val1およびid!=min_idであるレコードを削除します

于 2012-12-16T13:48:18.803 に答える
0

あなたはあなたが求めているものを作る方法の答えを持っています。本当にこの方法で値をマージしたいのだろうか?新しいテーブルは必要ありませんか?

メインテーブル

id  val1    

1.  john    
2.  larry  

新しいテーブル:

idMain val2

1 sam
1 joe
2 tom
于 2012-12-16T20:50:05.023 に答える