MySQL:将多个表导出到 CSV 文件

Posted

技术标签:

【中文标题】MySQL:将多个表导出到 CSV 文件【英文标题】:MySQL: export multiple tables to CSV file 【发布时间】:2015-10-06 22:16:53 【问题描述】:

我正在尝试将多个 mysql 表导出到单个 CSV 文件中,这些表具有不同数量的列并且没有任何共同点。下面是一个例子:

表1:

ID|    Name
1 |    Ted
2 |    Marry
null|    null

表2:

Married|    Age    |    Phone
Y      |    35     |    No
N      |    25     |    Yes
Y      |    45     |    No

我想要得到的结果是:

ID|    Name  |   Married    |    Age    |     Phone
1 |    Ted   |   Y          |    35     |     No
2 |    Marry |   N          |    25     |     Yes
null|  null  |   Y          |    45     |     No

是否可以使用 MySQL 命令?我已经尝试了所有类型的join,但它没有给我我需要的结果。

【问题讨论】:

table2 是否也包含 ID 或名称? 不,这两张表没有共同点 那样的话,你怎么知道 Marry 已经 25 岁并且有电话了?换句话说,你应该如何匹配table1table2 两张表有什么关系?是行号吗(如果是这样,这是一个非常糟糕的主意!) 所有行的年龄和名字都为 25 和 Marry 有关系吗? 【参考方案1】:

试试这个查询:

SELECT * FROM 
   (SELECT @n1:=@n1+1 as 'index', Table1.*  FROM Table1, (select @n1:=0)t)t1 
        natural join (SELECT @n2:=@n2+1 as 'index', Table2.*  FROM Table2, (select @n2:=0)t1)t2 ;

您可以在this fiddle 中看到一个工作示例。

在示例中,我们为 Table1Table2natural join 这两个表生成一个 index 列。

这样连接是使用由没有任何ORDER 运算符的表的SELECT 返回的行位置完成的,通常这不是一个好主意!

【讨论】:

您应该知道,虽然通常是自然顺序,但不能保证 select(没有 order by)返回的数据顺序。见dba.stackexchange.com/questions/5774/…。如果 Table1 中的 ID 有差距,那么也会有问题。 如果表 1 中存在空白,则预计会有一个空值,我会将其添加到我的问题中以明确这一点 差距是什么意思? null ID 的行或 ID = 4 且没有 ID =3 的行? @Trung 我编辑了为两个表生成索引列的解决方案【参考方案2】:

我不太确定您是否理解您的要求,但可以确定您可以加入两个表而无需真正关心 哪些 行将被匹配:

SET @i1=0;
SET @i2=0;

SELECT * INTO OUTFILE 'xyz' FIELDS TERMINATED BY ',' 
 FROM (SELECT @i1:=@i1+1 as i1, table1.* FROM table1) AS a
 JOIN (SELECT @i2:=@i2+1 as i2, table2.* FROM table2) b ON (a.i1=b.i2);

【讨论】:

见上面的评论——这不能保证给出一致的结果。 @PaulF:这就是重点。 OP 不关心行如何匹配,因此答案中的第一句话。 据我了解 OP 他并不关心“如何”连接是完成的,但表是按自然行顺序链接的。我可能错了 - OP 可以提供建议。

以上是关于MySQL:将多个表导出到 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章

将多个 CSV 文件加载到 MYSQL 中的单个表中 [重复]

重复将多个 Panda 数据集导出到多个 csv 文件的任务

mysql 每个表只导出1000条数据

将 MySQL 表导出到 .csv 文件

mysql将数据加载到多个表和循环中

使用html代码将mysql表导出到csv