mysql chèn vào bảng, dữ liệu từ bảng khác?


186

Tôi đã tự hỏi nếu có một cách để làm điều này hoàn toàn trong 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);

Lưu ý: q1 sẽ trả về khoảng 30k hàng.

Có cách nào để làm những gì tôi đang cố gắng ở trên trong sql thẳng không? Để chỉ kéo dữ liệu trực tiếp từ một bảng (về cơ bản là bảng dữ liệu thô) và chèn vào bảng khác (về cơ bản là bảng dữ liệu đã xử lý)?

Câu trả lời:


400
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) đưa ra câu trả lời 2) sửa định dạng câu hỏi. Đừng bỏ lỡ đơn hàng lần sau ;-)
zerkms

ha ha :-) yup..tôi chưa bao giờ quản lý để sắp xếp các ưu tiên của tôi! :-D
Jagmag

1
Đang làm việc! +1 Hoàn hảo và rất nhanh! Cảm ơn bạn đời. Chỉ cần xóa dấu ngoặc khỏi các trường CHỌN ...
Ai đó

@zerkms; Sẽ kích hoạt làm việc với INSERT INTO ... SELECTtuyên bố này ?
haccks

2
@haccks Tôi tin giống như thể nó chỉ là "bình thường"INSERT
zerkms

30

cho toàn bộ hàng

chèn vào xyz chọn * từ xyz2 trong đó id = "1";

cho cột được chọn

chèn vào xyz (t_id, v_id, f_name) chọn t_id, v_id, f_name từ xyz2 trong đó id = "1";

1
Toàn bộ cách tiếp cận hàng không thành công nếu đã có một bản ghi hiện có với khóa chính phù hợp.
HotN

Bạn đã tìm ra được giải pháp nào chưa? <Toàn bộ cách tiếp cận hàng không thành công nếu đã có bản ghi hiện có khóa chính phù hợp.>
Shivdhwaj Pandey

10

Trả lời bởi zerkms là phương pháp đúng. Nhưng, nếu ai đó đang tìm cách chèn thêm cột trong bảng thì bạn có thể lấy nó từ các mục sau:

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'

Trong truy vấn trên, có thêm 2 cột có tên email & current_time .


2
Điều gì xảy ra nếu tôi muốn chèn ba hàng dữ liệu có cùng giá trị từ các giá trị được chọn nhưng khác nhau cho các cột 'bổ sung' được thêm vào như email và current_time?
xxstevenxo

4
INSERT INTO Table1 SELECT * FROM Table2

Đây là một câu trả lời chất lượng rất thấp. Ngoài ra, không giống như câu trả lời được chấp nhận, nó thậm chí không cố gắng liên quan đến thông tin có trong câu hỏi.
Mike

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

Phân tích

Chúng tôi có thể sử dụng truy vấn trên nếu chúng tôi muốn sao chép dữ liệu từ bảng này sang bảng khác trong mysql

  1. Ở đây bảng nguồn và bảng đích giống nhau, chúng ta cũng có thể sử dụng các bảng khác nhau.
  2. Vài cột chúng tôi không sao chép như style_idis_delatted nên chúng tôi đã chọn chúng được mã hóa cứng từ một bảng khác
  3. Bảng chúng tôi sử dụng trong nguồn cũng chứa trường tăng tự động nên chúng tôi rời cột đó và nó được chèn tự động khi thực hiện truy vấn.

Kết quả thực hiện

Đã thực hiện 1 truy vấn, 1 thành công, 0 lỗi, 0 cảnh báo

Truy vấn: chèn vào pr Sơ_image (style_id, pre_image_status, file_extension, reviewer_id, uploader_id, is_delatted, last_updated) chọn ...

5 hàng bị ảnh hưởng

Thời gian thực hiện: 0.385 giây Thời gian chuyển: 0 giây Tổng thời gian: 0.386 giây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.