MySQL将查询导出为insert语句

MySQL将查询导出为insert语句,mysql,export,Mysql,Export,我有两个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语句。我已尝试将

我有两个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语句。我已尝试将数据添加到OUTFILE“/path/”中,但这仅将数据导出为制表符/逗号分隔的数据,是否可以将此数据导出为insert语句

干杯


Eef

您可能可以改用
mysqldump
。查看参数
--表
--其中=


您可以制作如下内容:

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'  
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;
选择
海螺(
海螺(
海螺(
海螺(
海螺(
concat('插入(所需的类型ID、类型ID、数量)值('
,ta.requiredTypeID)
,'", "')
,ta.typeID)
,'", "')
,ta.数量)
,'")')
从…起
`invtypes`as t,`typeactivitymaterials`as ta
哪里
体积>0,t.typeID=ta.typeID;
输入输出文件“文件名”

我知道它很难看,但我认为它解决了您的问题:)

您可以将INSERT与SELECT结合起来,直接从SELECT语句的结果插入记录

你这样做的方式是这样的:

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'  
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;
这里有一个到相关网站的链接


请注意,这实际上会立即执行插入操作;它不能完全满足您的要求(即生成insert语句供以后使用)。

如果您有MySQL Workbench,它可以为您生成insert语句

在SQL编辑器中运行查询,然后从结果集中单击导出按钮。然后在“另存为类型”中选择“SQL插入语句(*.SQL)”。单击“保存”,确认要导出的表,然后单击“确定”

如果打开该文件,您应该会看到结果集为带有列名的insert语句

我只在一个简单的select*from表上测试了这个。我还没有用多个表测试过这个。我希望这有帮助


编辑:似乎workbench可用于Windows、OSX和Linux(感谢vcardillo)

如果有人来寻找创建
MySQL
的确切查询,请将其留在这里。这个答案使用
mysqldump
作为@a'r建议

mysqldump-u-p mydb t1 t2 t3>mydb_tables.sql

concat可以接受两个以上的参数。非常方便,谢谢。甚至没有注意到“另存为”类型的下拉列表。谢谢另外,MySQL Workbench也适用于OSX和Linux。在这样做时,SQL INSERT不包括Blob类型的列数据。我认为这将是对最初提出的问题的答案。它为我工作得很好!是的,如果实例在不同的机器上,那么可能会更有用。