2011-10-17 82 views
6

Tôi đang cố gắng điền một bảng mới với các bản ghi từ 2 bảng khác.Chèn bản ghi MySQL từ nhiều bảng vào bảng mới

period_states là mới/trống

period_states 
    id 
    period_id 
    sla_id 

thời gian - chứa 15 hồ sơ

periods 
    id 

SLAs - chứa 84 hồ sơ

slas 
    id 

tôi cần phải cư period_states với mỗi sla_id hiện có mỗi khoảng thời gian thoát. Vì vậy, cuối cùng sẽ có 1260 hồ sơ trong period_states.

Bất kỳ ý tưởng nào về cách tự động hóa điều này? Nó sẽ là một cơn ác mộng để cư trú thủ công ...

Cảm ơn bạn trước !!

+1

Trường 'id' trong bảng' period_states' có được đặt là 'auto_increment' không? –

Trả lời

4
INSERT INTO period_states 
(period_id, sla_id) 
SELECT periods.id, slas.id 
FROM periods 
CROSS JOIN slas 
+0

Tôi không nói câu trả lời của tôi là sai, nhưng xét đoán từ các ý kiến, có vẻ như bạn muốn chấp nhận câu trả lời của câu trả lời @ spencer7593 –

+2

câu trả lời của bạn là đúng. Vì đây là câu trả lời 'đã chọn', tôi sẽ thêm một chú thích ở đây trong MySQL, đúng là 'JOIN',' INNER JOIN' và 'CROSS JOIN' đều đồng nghĩa với nhau. Thông số SQL ANSI định nghĩa 'CROSS JOIN' là một phép nối không có điều kiện tạo ra một sản phẩm Descartes. Bao gồm từ khóa 'CROSS' trong câu lệnh (ngay cả khi nó không được yêu cầu) làm tài liệu (để loại bỏ sự mơ hồ và làm cho mục đích rõ ràng hơn), và làm cho tuyên bố dễ dàng hơn với các RDBMS khác. – spencer7593

+1

@ spencer7593 cảm ơn vì đã chỉ ra điều đó. Tôi đã cập nhật câu trả lời vì lợi ích của người đọc trong tương lai. Cũng lên bình chọn câu trả lời của bạn cho sự hoàn chỉnh –

6

Nếu cột id của các quốc gia giai đoạn được định nghĩa là AUTO_INCREMENT, sau đó điều này sẽ làm việc:

INSERT INTO period_states (period_id, sla_id) 
SELECT p.id AS period_id 
    , s.id AS sla_id 
    FROM periods p 
CROSS 
    JOIN slas s 

Và đây là một ví dụ về một cách để cung cấp một giá trị cho id cột:

INSERT INTO period_states (id, period_id, sla_id) 
SELECT @myid := @myid + 1 AS id 
    , p.id AS period_id 
    , s.id AS sla_id 
    FROM periods p 
CROSS 
    JOIN slas s 
CROSS 
    JOIN (SELECT @myid := 0) m 
+0

Tuyệt vời - đó là nó. đó là chức năng "chéo" mà tôi không biết. Có, id period_states được tự động tăng lên. Cảm ơn các bạn! –

+0

Rất vui được làm việc cho bạn Katie. – spencer7593

2
insert into period_states select null, periods.id, slas.id from periods, slas 
0

Kiểm tra "chèn vào .... chọn"Cú pháp. ... khá giống những gì các câu trả lời khác đã hiển thị.

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