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 岁并且有电话了?换句话说,你应该如何匹配table1
和table2
?
两张表有什么关系?是行号吗(如果是这样,这是一个非常糟糕的主意!)
所有行的年龄和名字都为 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 中看到一个工作示例。
在示例中,我们为 Table1 和 Table2 和 natural 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 中的单个表中 [重复]