2012-06-29 3 views
1

전자 메일과 일치하지 않는 데이터가있는 레코드에서 누락 된 데이터를 채울 방법을 찾고 싶습니다.MySQL 백필에 레코드가 하나의 공통 필드가있는 누락 된 데이터

이름, 주소, 도시, 주, 우편 번호 및 이메일이있는 테이블이 있습니다. like

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

내가 원하는 것은 중복을 제거하고 관련 데이터를 잃지 않기 위해서입니다. 그래서 거기에있는 데이터로 각 레코드를 채우고 대신 속을 제거하고 싶습니다. 두 번째와 같은 모든 세부 사항이있는 레코드가 항상있는 것은 아닙니다. 경우에 따라 모든 데이터가 포함 된 레코드가 없을 수도 있습니다.

각 레코드에 사용 가능한 필드가 많이 있으므로 이상적으로 다음과 같이 끝내고 싶습니다. 필드에 2 개 이상의 다른 레코드가있는 경우 첫 번째 필드부터 채우는 것만으로도 충분합니다.

은 그 당신은 내가 내와 함께 즉석에서해야하므로 코드를 제공하지 않았다

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

에 오신 것을 환영입니다 ... 변경하려는 각 열에 대해 여러 번 1을 동일한 쿼리를 적용 : 당신은 코드, XML 또는 데이터 샘플을 게시하는 경우 ** ** 텍스트 편집기에서 해당 줄을 강조 표시하고 편집기 도구 모음에서 "코드 샘플"단추 ('{}) '를 클릭하여 멋지게 형식을 지정하고 구문을 강조 표시하십시오! –

+0

코드 예제를 제공하면 도움이 될 것입니다. – jcho360

+0

@marc_s : OP가 시작되었고 그는 아직 배우지 않았습니다. –

답변

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이라는 하나의 열에 대해했습니다. 쿼리를 수정하여 테이블에 적용하십시오. 따라서 두 가지 옵션이 있습니다.

  1. 다른 테이블을 추가하고 하나의 큰 쿼리를 만듭니다.
  2. 여기

내 예에 StackOverflow에

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) 
관련 문제