2014-11-26 3 views
1

ID (자동 증가), 이름, 전화 및 전자 메일의 4 개 열이있는 테이블이 있다고 가정합니다. 문제는 때때로 이름이 반복된다는 것입니다. 예 :MySQL의 행 병합

+----+------+-------+--------------+ 
| id | name | phone | email  | 
+----+------+-------+--------------+ 
| 1 | aaa |  |    | 
| 2 | aaa | 123 |    | 
| 3 | aaa |  | [email protected] | 
+----+------+-------+--------------+ 

이 세 항목을 모든 입력란을 하나로 병합하는 가장 좋은 방법은 무엇입니까? 예상 결과는 다음과 같습니다.

+----+------+-------+--------------+ 
| id | name | phone | email  | 
+----+------+-------+--------------+ 
| 4 | aaa | 123 | [email protected] | 
+----+------+-------+--------------+ 

미리 감사드립니다.

답변

2

id의 설정을 제외하고는 집계를 사용하여이 작업을 수행 할 수 있습니다. 이게 당신이 원하는대로합니까?

select max(id) + 1, name, max(phone) as phone, max(email) as email 
from table t 
group by name; 

편집 : 당신이 삽입 새 값 다음 이전 내용을 삭제하려면 원하는 경우

, 당신은 할 수 : 다음

insert into table(name, phone, email) 
    select max(id) + 1, name, max(phone) as phone, max(email) as email 
    from table t 
    group by name 
    having count(*) > 1; 

과 :

delete t from table t join 
       (select t.name, max(id) as maxid 
       from table t 
       group by t.name 
      ) tt 
       on t.name = tt.name and t.id < tt.maxid; 
+0

id 필드가이 테이블에 대한 PK라고 가정하면, 이미 어떤 ID가 있는지 알지 못하기 때문에 ID 필드를 선택하고 싶지 않습니다. 위의 예제에서 bbb라는 이름에 해당하는 ID 4 행이 이미있는 경우 문이 실패합니다. PK가 없다면 오류가 발생하지 않을 것입니다. id 필드가 auto-inc라면 어쨌든 그것을 지정하고 싶지 않을 것입니다. – Vyas

+0

첫 번째 비트는 필요한 것입니다. 삽입 할 필요없이 모든 행을 결합하여 선택하면됩니다. 고맙습니다!! – Alex

+0

그 경우 내가 말한 것을 무시하십시오! – Vyas