1

これは有効な mysql ステートメントですか?

select * from TableA , TableB ;

そうでない場合、2 つのテーブルを選択するための正しい mysql ステートメントは何ですか。

これに何か問題があると思う理由は、mysql ステートメントを書いたからです。

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

そしてそれは無限ループに行きました。私が終了したとき。csv ファイルのサイズは数 GB に達していました。

4

3 に答える 3

4

これは技術的には無限ループではありません。2 つのテーブルのデカルト積を作成しています。つまり、テーブル a の各行に対して、テーブル b のすべての行が複製されます。これは、あなたがやりたいことではありません。出力が AXB 行になることを意味します。ここで、A はテーブル A の行数、B はテーブル B の行数です。

このタスクを達成するには、2 つのステートメントを選択してファイルに 2 回追加するか、2 つのテーブルを一緒に UNION するか、それらを JOIN します。SQL Union の場合は Google、詳細については INNER JOIN を参照してください。

于 2009-12-14T12:38:51.660 に答える
1

そのクエリはクロス結合を生成するため、行数はテーブル A の数 * テーブル B の数になります。

たとえば、これらの各テーブルに 100,000 行が含まれている場合、CSV は 10,000,000,000 行になります。

于 2009-12-14T12:41:17.613 に答える
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' ;
于 2009-12-14T12:53:46.857 に答える