我有两个mysql表,它们都有一个共同的typeID。我想从这两个具有相同typeID的表中选择所有内容,查询如下:
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
答案 0 :(得分:45)
您可以使用mysqldump
代替。查看参数--tables
和--where=
。
答案 1 :(得分:28)
如果您有MySQL Workbench,它可以为您生成插入语句。
在SQL编辑器中运行查询,然后从结果集中单击导出按钮。然后在“另存为类型”中选择“SQL INSERT语句(* .sql)”。单击“保存”,确认要导出的表,然后单击“确定”。
如果打开文件,您应该将结果集看作带有列名的插入语句。
我只在一个简单的select * from table上测试过它。我没有用多个表测试这个。我希望这会有所帮助。
编辑:似乎工作台可用于Windows,OSX和Linux(感谢vcardillo)
答案 2 :(得分:13)
您可以将INSERT与SELECT结合使用,直接从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的链接。
请注意,这实际上会立即插入;它不会完全符合您的要求(生成插入语句以供以后使用)。
答案 3 :(得分:8)
如果有人来寻找创建MySQL
export
查询作为insert
语句的确切查询,请将其保留在此处。此答案使用mysqldump
作为@ a' r建议。
mysqldump -u<user-name> -p<password> mydb t1 t2 t3 > mydb_tables.sql
答案 4 :(得分: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'
我知道这很丑,但我认为它解决了你的问题:)