2010-09-24 36 views
18

Tôi có hai bảng mysql có cả hai loại ID chung. Tôi muốn chọn mọi thứ từ hai bảng này với cùng loạiID, truy vấn bên dưới:Truy vấn xuất khẩu MySQL dưới dạng câu lệnh chèn

SELECT ta.requiredTypeID, ta.typeID, ta.quantity 
    FROM `invtypes` as t, `typeactivitymaterials` as ta 
    WHERE volume > 0 AND t.typeID = ta.typeID; 

Điều này mang lại cho tôi kết quả chính xác nhưng tôi đang cố gắng xuất truy vấn này dưới dạng câu lệnh chèn. Tôi đã thử thêm INTO OUTFILE "/ path /" nhưng điều này chỉ xuất dữ liệu dưới dạng dữ liệu được phân cách bằng dấu phẩy/dấu phẩy, có thể xuất dữ liệu này dưới dạng câu lệnh chèn không?

Cheers

Eef

Trả lời

11

Bạn có thể kết hợp với INSERT SELECT để chèn hồ sơ trực tiếp từ kết quả của câu lệnh chọn.

Cách bạn làm điều đó sẽ là một cái gì đó như thế này:

INSERT INTO newtable (requiredTypeID, typeID, quantity) 
    SELECT ta.requiredTypeID, ta.typeID, ta.quantity 
     FROM `invtypes` as t, `typeactivitymaterials` as ta 
     WHERE volume > 0 AND t.typeID = ta.typeID; 

Dưới đây là một liên kết đến có liên quan MySQL manual page.

Lưu ý rằng điều này thực sự sẽ thực hiện việc chèn ngay; nó sẽ không làm những gì bạn yêu cầu (để tạo ra các câu lệnh chèn để sử dụng sau này).

+0

Điều đó làm việc như một điều trị, tuyệt vời, cổ vũ. – RailsSon

41

Bạn có thể có thể sử dụng mysqldump để thay thế. Kiểm tra các thông số --tables--where=.

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

+2

Tôi nghĩ đó sẽ là câu trả lời cho câu hỏi ban đầu được hỏi. Nó làm việc rất tốt cho tôi! – Nico

+2

Có, và có thể hữu ích hơn nhiều nếu các phiên bản trên các máy khác nhau. –

4

Bạn có thể làm một cái gì đó như thế này:

select 
     concat(
     concat(
      concat(
      concat(
       concat(
       concat('insert into <table> (requiredTypeID, typeID, quantity) values ("' 
         ,ta.requiredTypeID) 
       ,'", "') 
      ,ta.typeID) 
      ,'", "') 
     ,ta.quantity) 
     ,'")') 
FROM 
     `invtypes` as t, `typeactivitymaterials` as ta 
WHERE 
     volume > 0 AND t.typeID = ta.typeID; 
INTO OUTFILE 'file_name' 

Tôi biết nó là xấu xí nhưng tôi nghĩ rằng nó giải quyết trường hợp của bạn :)

+2

làm cho nó thoát khỏi các giá trị? –

+6

concat có thể mất nhiều hơn hai tham số. –

22

Nếu bạn có MySQL Workbench, nó có thể tạo ra các câu lệnh chèn cho bạn.

Trong trình soạn thảo SQL chạy truy vấn của bạn, sau đó từ tập kết quả, bạn có thể nhấp vào nút xuất. Sau đó, trong "Save as Type", hãy chọn "SQL INSERT statements (* .sql)". Nhấp vào Lưu, xác nhận bảng bạn đang xuất và nhấp OK.

Nếu bạn mở tệp, bạn sẽ thấy tập kết quả của mình dưới dạng câu lệnh chèn với tên cột.

Tôi chỉ kiểm tra điều này trên một lựa chọn đơn giản * từ bảng. Tôi đã không thử nghiệm này với nhiều bảng. Tôi hi vọng cái này giúp được.

EDIT: Có vẻ như bàn làm việc có sẵn cho Windows, OSX và Linux (Cảm ơn vcardillo)

+1

Siêu tiện dụng, cảm ơn. Thậm chí không chú ý đến danh sách thả xuống để lưu dưới dạng. Cảm ơn! – vcardillo

+1

Ngoài ra, MySQL Workbench cũng tồn tại cho OSX và Linux. – vcardillo

3

Chỉ cần để lại nó ở đây, nếu có ai đó đến tìm kiếm truy vấn chính xác để tạo MySQLexport truy vấn như insert báo cáo, bạn có thể sử dụng mysqldump làm @ a'r được đề xuất.

mysqldump -u<user-name> -p<password> mydb t1 t2 t3 > mydb_tables.sql 
Các vấn đề liên quan