mysql :: 다른 테이블의 데이터를 테이블에 삽입 하시겠습니까?


187

SQL 에서이 작업을 수행 할 수있는 방법이 있는지 궁금합니다.

q1 = SELECT campaign_id, from_number, received_msg, date_received 
     FROM `received_txts` WHERE `campaign_id` = '8';
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)    
    VALUES(q1.campaign_id, q1.from_number, q1.received_msg, q1.date_received);

참고 : q1은 약 30k 행을 반환합니다.

위의 SQL에서 위의 시도를 수행 할 수있는 방법이 있습니까? 한 테이블 (기본적으로 원시 데이터 테이블)에서 데이터를 똑바로 가져 와서 다른 테이블 (기본적으로 처리 된 데이터 테이블)에 삽입하려면?

답변:


401
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)  
SELECT campaign_id, from_number, received_msg, date_received
  FROM `received_txts`
 WHERE `campaign_id` = '8'

1
@InSane : 1) 답변 제공 2) 질문 형식을 수정하십시오. 다음 번에 주문을 놓치지 마세요 ;-)
zerkms

ha ha :-) yup..i는 우선 순위가 정해지지 않았습니다! :-D
Jagmag

1
일! +1 완벽하고 매우 빠릅니다! 고마워 친구 SELECT 필드에서 괄호를 제거해야했습니다 ...
누군가

@zerkms; 이 INSERT INTO ... SELECT문장에서 트리거가 작동 합니까?
haccks

2
@haccks 나는 그것이 단지 "정상적인"것과 같다고 생각합니다INSERT
zerkms

30

전체 행

xyz에 삽입 select * from xyz2 여기서 id = "1";

선택된 열

xyz (t_id, v_id, f_name)에 삽입 xyz2에서 t_id, v_id, f_name을 선택하십시오. 여기서 id = "1";

1
기본 키와 일치하는 기존 레코드가 이미 있으면 전체 행 접근 방식이 실패합니다.
HotN

해결책을 찾았습니까? <일치하는 기본 키를 가진 기존 레코드가 이미있는 경우 전체 행 접근이 실패합니다.>
Shivdhwaj Pandey

10

응답 zerkms하는 정확한 방법이다. 그러나 누군가 테이블에 더 많은 열을 삽입하려는 경우 다음에서 얻을 수 있습니다.

INSERT INTO action_2_members (`campaign_id`, `mobile`, `email`, `vote`, `vote_date`, `current_time`)
SELECT `campaign_id`, `from_number`, 'example@domain.xyz', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8'

위 쿼리에는 email & current_time 이라는 두 개의 추가 열이 있습니다 .


2
전자 메일 및 current_time과 같이 추가 된 '추가'열에 대해 선택 값은 동일하지만 값이 다른 세 개의 데이터 행을 삽입하려면 어떻게해야합니까?
xxstevenxo

4
INSERT INTO Table1 SELECT * FROM Table2

이것은 매우 낮은 품질의 답변입니다. 또한 허용되는 답변과 달리 질문에 포함 된 정보와도 관련이 없습니다.
마이크

0
INSERT INTO preliminary_image (style_id,pre_image_status,file_extension,reviewer_id,
uploader_id,is_deleted,last_updated) 

SELECT '4827499',pre_image_status,file_extension,reviewer_id,
uploader_id,'0',last_updated FROM preliminary_image WHERE style_id=4827488

분석

mysql의 한 테이블에서 다른 테이블로 데이터를 복사하려면 위 쿼리를 사용할 수 있습니다

  1. 여기서 소스 테이블과 대상 테이블은 동일하며 다른 테이블도 사용할 수 있습니다.
  2. style_idis_deleted 와 같이 복사하지 않는 열은 거의 없습니다. 없으므로 다른 테이블에서 하드 코딩 된 열
  3. 소스에서 사용한 테이블에도 자동 증분 필드가 포함되어 있으므로 해당 열을 떠나 쿼리 실행시 자동으로 삽입됩니다.

실행 결과

쿼리 1 개, 성공 1 개, 오류 0 개, 경고 0 개

쿼리 : 예비 _ 이미지에 삽입 (style_id, pre_image_status, file_extension, reviewer_id, uploader_id, is_deleted, last_updated) select ...

5 행 영향을 받음

실행 시간 : 0.385 초 전송 시간 : 0 초 총 시간 : 0.386 초

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.