2010-11-22 61 views
147

Tôi đã tự hỏi nếu có một cách để làm điều này hoàn toàn trong sql:mysql :: chèn vào bảng, dữ liệu từ bảng khác?

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ề 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ỉ cần kéo dữ liệu trực tiếp từ một bảng (về cơ bản là một bảng dữ liệu thô) và chèn vào một bảng khác (về cơ bản là một bảng dữ liệu đã xử lý)?

Trả lời

307
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' 
+0

Hoàn hảo :) Tôi đã gần ... ish. Sẽ chấp nhận câu trả lời asap – Hailwood

+1

+1 bị đánh bại bởi chỉ vài giây quan trọng sau :-) – InSane

+1

@InSane: 1) đưa ra câu trả lời 2) sửa định dạng câu hỏi. Đừng bỏ lỡ thứ tự thời gian tới ;-) – zerkms

19

cho toàn bộ hàng

insert into xyz select * from xyz2 where id="1";

cho cột chọn

insert into xyz(t_id,v_id,f_name) select t_id,v_id,f_name from xyz2 where id="1";
+0

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

-1

Bạn có thể làm điều đó như như sau:

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' 
+6

Không phải chính xác những gì zerkms đã viết cách đây 5 năm (ngoài 'xung quanh cột và tên bảng)? – user276648

1
INSERT INTO Table1 SELECT * FROM Table2 
5

Đã trả lời bởi zerkms là phương pháp chính xác. Nhưng, nếu ai đó tìm cách để chèn thêm nhiều cột trong bảng sau đó bạn có thể lấy nó từ sau:

INSERT INTO action_2_members (`campaign_id`, `mobile`, `email`, `vote`, `vote_date`, `current_time`) 
SELECT `campaign_id`, `from_number`, '[email protected]', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8' 

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

+1

Điều gì sẽ 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

Các vấn đề liên quan