1

データのあるレコードからメールが一致しないレコードまで、欠落しているデータを埋める方法を見つけたいと考えています。

名前、住所、都市、州、郵便番号、電子メールを含むテーブルがあります。このような

kim,,,55555,kim@domain.com
kim,Longmont,CO,55555,kim@domain.com
kim,,,,kim@domain.com

私がやりたいのは、重複を削除し、関連データを失わないようにすることです。したがって、各レコードにそこにあるデータをバックフィルしてから、重複を削除したいと思います。2 枚目のようにすべての詳細が記録されているレコードは常にあるとは限りません。すべてのデータを含むレコードがない場合もあります。

理想的には、各レコードに利用可能なフィールドができるだけ多く含まれるように、次のようになりたいと思います。フィールドに 2 つ以上の異なるレコードがある場合、最初から入力するだけで問題ありません。

それが公平な説明であることを願っています

kim,Longmont,CO,55555,kim@domain.com
kim,Longmont,CO,55555,kim@domain.com
kim,Longmont,CO,55555,kim@domain.com
4

1 に答える 1

1

あなたはコードを提供しなかったので、私は即興でコードを作成する必要があります。私は2つのテーブルt1とt2を持っています.t2はt1の正確なコピーです(テーブルのコピーを作成するか、それで動作するかどうかわからない自己結合を使用してみてください)。わたしにはできる:

update t2,t1 set t2.first_name=
case when t2.first_name='' 
then t1.first_name 
else t2.first_name end 
where t2.actor_id=t1.actor_id 
and t1.first_name!='';

first_name という 1 つの列に対して実行しました。クエリを変更してテーブルに適用します。したがって、2 つのオプションがあります。

  1. 他のテーブルを追加して、1 つの大きなクエリを作成します。
  2. 変更する列ごとに、同じクエリを複数回適用します...

これが私の例です

mysql> select * from t2 limit 10;
+----------+------------+--------------+---------------------+
| actor_id | first_name | last_name    | last_update         |
+----------+------------+--------------+---------------------+
|        1 |            | GUINESS      | 2012-06-29 08:36:22 |
|        2 |            | WAHLBERG     | 2012-06-29 08:36:22 |
|        3 |            | CHASE        | 2012-06-29 08:36:22 |
|        4 |            | DAVIS        | 2012-06-29 08:36:22 |
|        5 |            | LOLLOBRIGIDA | 2012-06-29 08:36:22 |
|        6 |            | NICHOLSON    | 2012-06-29 08:36:22 |
|        7 |            | MOSTEL       | 2012-06-29 08:36:22 |
|        8 |            | JOHANSSON    | 2012-06-29 08:36:22 |
|        9 |            | SWANK        | 2012-06-29 08:36:22 |
|       10 | CHRISTIAN  | GABLE        | 2006-02-15 04:34:33 |
+----------+------------+--------------+---------------------+
10 rows in set (0.00 sec)

mysql> select * from t1 order by actor_id limit 10;
+----------+------------+--------------+---------------------+
| actor_id | first_name | last_name    | last_update         |
+----------+------------+--------------+---------------------+
|        1 | PENELOPE   | GUINESS      | 2006-02-15 04:34:33 |
|        1 | a          |              | 0000-00-00 00:00:00 |
|        2 | NICK       | WAHLBERG     | 2006-02-15 04:34:33 |
|        3 | ED         | CHASE        | 2006-02-15 04:34:33 |
|        4 | JENNIFER   | DAVIS        | 2006-02-15 04:34:33 |
|        5 | JOHNNY     | LOLLOBRIGIDA | 2006-02-15 04:34:33 |
|        6 | BETTE      | NICHOLSON    | 2006-02-15 04:34:33 |
|        7 | GRACE      | MOSTEL       | 2006-02-15 04:34:33 |
|        8 | MATTHEW    | JOHANSSON    | 2006-02-15 04:34:33 |
|        9 | JOE        | SWANK        | 2006-02-15 04:34:33 |
+----------+------------+--------------+---------------------+
10 rows in set (0.00 sec)

mysql> update t2,t1 set t2.first_name=case when t2.first_name='' then t1.first_name else t2.first_name end where t2.actor_id=t1.actor_id and t1.first_name!='';
Query OK, 9 rows affected (0.03 sec)
Rows matched: 200  Changed: 9  Warnings: 0

mysql> select * from t2 limit 10;
+----------+------------+--------------+---------------------+
| actor_id | first_name | last_name    | last_update         |
+----------+------------+--------------+---------------------+
|        1 | PENELOPE   | GUINESS      | 2012-06-29 08:37:34 |
|        2 | NICK       | WAHLBERG     | 2012-06-29 08:37:34 |
|        3 | ED         | CHASE        | 2012-06-29 08:37:34 |
|        4 | JENNIFER   | DAVIS        | 2012-06-29 08:37:34 |
|        5 | JOHNNY     | LOLLOBRIGIDA | 2012-06-29 08:37:34 |
|        6 | BETTE      | NICHOLSON    | 2012-06-29 08:37:34 |
|        7 | GRACE      | MOSTEL       | 2012-06-29 08:37:34 |
|        8 | MATTHEW    | JOHANSSON    | 2012-06-29 08:37:34 |
|        9 | JOE        | SWANK        | 2012-06-29 08:37:34 |
|       10 | CHRISTIAN  | GABLE        | 2006-02-15 04:34:33 |
+----------+------------+--------------+---------------------+
10 rows in set (0.00 sec)
于 2012-06-29T12:39:52.453 に答える