【问题标题】:mysql - select * from tableA, tableB - problemmysql - 从tableA,tableB中选择* - 问题
【发布时间】:2009-12-14 12:35:43
【问题描述】:

这是一个有效的 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。

【问题讨论】:

  • TableA 和 TableB 是否相关?

标签: mysql sql into-outfile


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      例如,如果这些表中的每一个都有 100,000 行,那么您的 CSV 最终将有 10,000,000,000 行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-12
        • 2020-01-27
        • 2012-08-14
        • 2023-03-06
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        相关资源
        最近更新 更多