2012-06-29 36 views
1

我想找到一種方法來填寫缺少數據的記錄中有數據的記錄不在電子郵件匹配的地方。MySQL回填丟失的數據,其中記錄有一個公共字段

我有一個表,它有名稱,地址,城市,州,郵編和電子郵件。像這樣

kim,,,55555,[email protected] 
kim,Longmont,CO,55555,[email protected] 
kim,,,,[email protected] 

我想要做的是刪除重複項而不會丟失相關數據。所以我想用每個記錄的數據回填,然後刪除模糊。並不總是有像第二個那樣的所有細節的記錄。有時可能沒有任何數據的記錄。

理想情況下,我想結束以下,所以每個記錄有許多可用的字段。如果一個字段有兩個或更多不同的記錄,我只需填寫第一個記錄即可。

我希望這是它的一個合理的解釋

kim,Longmont,CO,55555,[email protected] 
kim,Longmont,CO,55555,[email protected] 
kim,Longmont,CO,55555,[email protected] 
+1

歡迎StackOverflow上:如果您發佈的代碼,XML或數據樣本,請**在文本編輯器中高亮顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」),以精確地格式化和語法突出顯示它! –

+0

如果您提供的代碼示例,它會更容易地幫助您 – jcho360

+0

@marc_s:OP是begineer,他還沒有學習。 –

回答

1

你沒有提供任何代碼,所以我有我的即興發揮。我有兩個表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的列。修改查詢並將其應用於您的表。所以你有2個選項:

  1. 添加其他表,並作出一個大的查詢。
  2. 多次應用相同的查詢1要更改的每一列...

這裏是我的榜樣

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) 
相關問題