개발 Q&A

제목 mysql 에서 두개 이상의 테이블을 하나로 합치려고 합니다.
글쓴이 람이 작성시각 2015/09/10 09:57:30
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 12477   RSS
두개의 테이블을 합칠 경우 중복되는 unique 필드의 값을 없애거나 변경하여 저장되도록 할 수 있을까요 ?


INSERT INTO `wiz_product2_new` select * from ( select * from `wiz_product2_mode_old` union all select * from `wiz_product2_hanjin_old` ) as dt
 다음글 분산 서버에 관해 조언좀 부탁드리겠습니다. (4)
 이전글 오랫만입니다... mysql 질문요... (6)

댓글

한대승(불의회상) / 2015/09/10 10:04:06 / 추천 0
union 은 중복된 행을 제거 하니 중복된 행도 집어 넣으려면 union all 을 사용해 보세요.
람이 / 2015/09/10 10:13:08 / 추천 0
한대승(불의회상) 님 보시다 시피 union all 을 했지만, unique key 필드로 인해서 인지 앞단의 데이타만 들어가고 뒤의 union all 한 데이타는 들어가질 못해서요... ㅠ.ㅜ
들국화 / 2015/09/10 10:28:17 / 추천 0
unique 필드가 pk 인가요?
유니크 키가 바뀌어도 된다면 위 값을 union all 할때 unique 를 빼고 union 한 다음에 정렬해서 inert 하세요.
유니크 키는 규칙에 맞게 생성하세요.
한대승(불의회상) / 2015/09/10 10:38:28 / 추천 0
unique key가 문제라면  컬럼들을 주욱 나열하고 auto_increment를 대신 할 NULL을 집어넣어야 한다능.. ㅋㅋㅋㅋ
들국화 / 2015/09/10 12:43:46 / 추천 0
auto_incremant 가 아닐수도 있지 않을까요? ^^ 그냥 unique 라고 했으니.
한대승(불의회상) / 2015/09/10 13:23:38 / 추천 0
@들국화 네 그럴수 있겠네요 ^^
보통 mysql 사용하면 일반적으로 primary key에 auto_increment를 집어 넣어서.. 이넘의 선입견.. ^^;;;;
들국화 / 2015/09/10 13:33:27 / 추천 0
@한대승 mysql의 innodb는 pk를 안만들면 내부적으로 보이지 않는 pk를 가지는걸로 알고 있습니다.
오래전에 본거라 기억이 가물 가물 하긴 하네요.
그래서 명시적으로 pk를 잡아 주는게 좋은지 아닌지 한동안 고민을 했던적도 많았거든요.
람이 / 2015/09/10 15:19:15 / 추천 0
들국화, 한대승(불의회상) 님 모두 관심 감사드립니다.
업체 미팅 하고 왔더니 이리 많은 글이. ㅋ

한대승님 말처럼 auto_increment 에 primary_key 맞습니다.

현재 구글링 하면서 나름의 해결책으로 아래와 같이 하고 있습니다... 이게 정답인지는 모릅니다 ㅋ
일단 충돌은 없네요...


mysql_query("CREATE TABLE `wiz_prd_group_new` LIKE `wiz_prd_group` ");
$r3 = mysql_query("SHOW TABLES LIKE 'wiz_prd_group_new' ");
if($r3) {
 mysql_query("
      INSERT INTO `wiz_prd_group_new` select * from
      (
       select '', catcode,depthno,priorno01,priorno02,priorno03,grp_name,grp_use,grp_img,grp_img_over,grp_subimg,grp_subimg_type,grp_skin,grp_num,grp_width,grp_height,grp_path
       from `wiz_prd_group_mode_old`
      UNION
       select '', catcode,depthno,priorno01,priorno02,priorno03,grp_name,grp_use,grp_img,grp_img_over,grp_subimg,grp_subimg_type,grp_skin,grp_num,grp_width,grp_height,grp_path
       from `wiz_prd_group_hanjin_old`
      ) as dt
     ");
}
 
한대승(불의회상) / 2015/09/10 15:30:12 / 추천 0
'' 나 NULL 이나 값이 없으면 자동증가 값으로 대체 하니 정답중 하나 입니다.