【问题标题】:MySQL: export multiple tables to CSV fileMySQL:将多个表导出到 CSV 文件
【发布时间】: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 有关系吗?

标签: mysql csv


【解决方案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 可以提供建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多