Tôi cần sao chép dữ liệu từ bảng này sang bảng khác. Các bảng không có tất cả các cột hoặc thứ tự giống nhau; nhưng dữ liệu được sao chép luôn ở trong cùng một cột; đó là dữ liệu từ cột foo
phải được sao chép sang cột foo
.Sao chép dữ liệu bảng có các cột chung
Nếu nó là chỉ hai bảng tôi chỉ có thể hardcode các tên cột như:
INSERT INTO table_target (column1, column2, column4)
SELECT column1, column2, column4 FROM table_source;
Tuy nhiên có một vài chục bảng, và một số chuyển đổi thêm việc cần phải làm, vì vậy nó sẽ được tốt đẹp nếu tôi có thể nói: Sao chép bất kỳ cột nào phù hợp và bỏ qua phần còn lại.
Tôi đã cố gắng tìm ra cách để có danh sách các cột phổ biến, nhưng bây giờ tôi bị kẹt.
SELECT src.col
FROM (SELECT COLUMN_NAME as col
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table_target') as trg
INNER JOIN
(SELECT COLUMN_NAME as col
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table_source') as src ON (src.col=trg.col)
;
bạn có thể sử dụng sql động không? bạn đang sử dụng SQL bên trong một ngôn ngữ lập trình khác? – golimar
điều này nghe giống như một công việc một lần. Điều đó có đúng không? Hay đó là thứ gì đó phải chạy liên tục, có thể trong sản xuất? Nếu nó là một điều một lần, bạn có thể sử dụng mã trên (với một số thay đổi) để tạo ra nhiều SQL hơn, và sau đó chạy SQL được tạo ra. – MJB
Vâng, đó là truy vấn một lần và giải pháp mà tôi đã sử dụng về cơ bản là quy trình hai bước này. Tuy nhiên, sẽ thật tuyệt khi biết cách thực hiện "đúng". – Odalrick