mysql - выбрать * из таблицы A, tableB - проблема

Это правильное утверждение 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-файл вырос в ГБ в размере.

3 ответа

Решение

Если вы хотите взять только все записи таблицы А, а затем все записи из таблицы В в последовательном порядке, union Ключевое слово может представлять интерес.

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

Технически это не бесконечный цикл - вы создаете декартово произведение двух таблиц - это означает, что для каждой строки в таблице a каждая строка в таблице b будет дублироваться. Это почти никогда не то, что вы хотите сделать - это означает, что ваши выходные данные будут AXB-строками, где A - количество строк в таблице A, а B - количество строк в таблице B.

Вы либо хотите выполнить эту задачу, выбрав два оператора и дважды добавив в файл, ОБЪЕДИНЯЯ две таблицы вместе или СОЕДИНЯЯ их вместе. Google для SQL Union и INNER JOIN, чтобы узнать больше.

Этот запрос приведет к перекрестному соединению, поэтому количество строк будет равно количеству таблицы A * и количеству таблицы B.

Если бы в каждой из этих таблиц было 100000 строк, например, в CSV было бы 10 000000000 строк.

Другие вопросы по тегам