mysql - select * from tableA,tableB - problem

时间:2009-12-14 12:35:44

标签: mysql sql into-outfile

这是一个有效的mysql语句吗?

select * from TableA , TableB ;

如果不是,选择这两个表的正确mysql语句是什么。

为什么我认为这有问题是我写了一个mysql语句

select * from TableA, TableB INTO OUTFILE 'c:/test.csv' FIELDS TERMINATED BY ','  ENCLOSED BY '"'  LINES TERMINATED BY '\n' ;

它进入了无限循环。当我终止。 csv文件的大小已经增长到GB。

3 个答案:

答案 0 :(得分:4)

技术上不是无限循环 - 您正在创建两个表的笛卡尔积 - 这意味着对于表a中的每一行,表b中的每一行都将被复制。这几乎不是你想要做的 - 它意味着你的输出将是AXB行,其中A是表A中的行数,B是表B中的行数。

您要么通过选择两个语句并将文件追加到文件两次,将两个表联合在一起,或者将它们连接在一起来完成此任务。 Google for SQL Union和INNER JOIN了解更多信息。

答案 1 :(得分:1)

该查询将产生交叉连接,因此行数将是表A *表B的计数。

如果其中每个表中都有100,000行,那么您的CSV最终会有10,000,000,000行。

答案 2 :(得分:1)

如果您只想按顺序获取TableA的所有记录,然后获取TableB中的所有记录,则可能会对union关键字感兴趣。

SELECT * FROM TableA
UNION
SELECT * FROM TableB 
    INTO OUTFILE 'c:/test.csv' 
    FIELDS TERMINATED BY ','  
    ENCLOSED BY '"'  
    LINES TERMINATED BY '\n' ;