2010-09-24 77 views
18

我有兩個共同具有typeID的mysql表。我想選擇一切從具有相同TYPEID這兩個表,查詢如下:作爲插入語句的MySQL導出查詢

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

這給了我正確的結果,但我想這個查詢導出爲INSERT語句。我已經嘗試添加INTO OUTFILE「/ path /」,但這隻能導出數據爲製表符/逗號分隔數據,是否可以將這些數據作爲插入語句導出?

乾杯

EEF

回答

11

您可以選擇組合INSERT插入記錄直接來自select語句的結果。

你這樣做會是這樣的方式:

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; 

下面是相關MySQL manual page的鏈接。

請注意,這實際上會做插入馬上;它不會完全符合你的要求(這是爲了以後生成插入語句)。

+0

這就像一種享受,非常好,歡呼聲。 – RailsSon 2010-09-24 12:25:26

41

您可能能夠使用mysqldump代替。查看參數--tables--where=

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

+2

我認爲這將是原來的問題問的答案。它對我來說非常合適! – Nico 2013-09-16 22:29:08

+2

是的,如果實例位於不同的機器上,它可以更有用。 – 2014-12-04 16:45:45

4

你可以讓這樣的事情:

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' 

我知道這是醜陋的,但我認爲它可以解決你的情況:)

+2

doies it escape values?可以採用多於兩個參數的 – 2010-09-24 12:18:46

+6

concat。 – 2011-08-25 15:17:44

22

如果你有MySQL Workbench,它可以爲你生成插入語句。

在SQL編輯器中運行您的查詢,然後從結果集中單擊導出按鈕。然後在「另存爲類型」中選擇「SQL INSERT語句(* .sql)」。點擊保存,確認您要導出的表格,然後點擊確定。

如果你打開文件,你應該看到你的結果集作爲插入語句的列名。

我只測試了這個簡單的select * from table。我沒有用多個表測試過。我希望這有幫助。

編輯:好像工作臺可用於Windows,OSX和Linux(感謝vcardillo)

+1

超好用,謝謝。甚至沒有注意到保存爲類型的下拉菜單。謝謝! – vcardillo 2013-05-15 20:01:08

+1

另外,MySQL Workbench也適用於OSX和Linux。 – vcardillo 2013-05-15 20:01:34

3

就離開這裏,如果有人來尋找準確的查詢創建MySQLexport查詢作爲insert語句,你可以如@ @建議使用mysqldump

mysqldump -u<user-name> -p<password> mydb t1 t2 t3 > mydb_tables.sql