mysql - выбрать * из таблицы A, таблица B - проблема - PullRequest
1 голос
/ 14 декабря 2009

это правильный оператор 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 ]

4 голосов
/ 14 декабря 2009

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

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

1 голос
/ 14 декабря 2009

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

SELECT * FROM TableA
UNION
SELECT * FROM TableB 
    INTO OUTFILE 'c:/test.csv' 
    FIELDS TERMINATED BY ','  
    ENCLOSED BY '"'  
    LINES TERMINATED BY '\n' ;
1 голос
/ 14 декабря 2009

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

Если бы в каждой из этих таблиц было по 100 000 строк, например, у вашего CSV было бы 10 000 000 000 строк.

...