MySQL CSV Export с данными и заголовком - PullRequest
0 голосов
/ 09 мая 2018

Я также пытался экспортировать CSV из базы данных MySQL с помощью заголовка. Но я получаю следующую ошибку -

ERROR 1222 (21000): The used SELECT statements have a different number of columns

MySQL Query, как показано ниже -

SELECT * FROM (
  (SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'ORDERS'
    AND TABLE_SCHEMA = 'REMOTE'
    ORDER BY ORDINAL_POSITION)
  UNION ALL
  (SELECT * FROM ORDERS WHERE orderDate>='2018-05-07')) AS TBL
INTO OUTFILE 'C:/xampp/htdocs/WES/DBScript/SS_Orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

1 Ответ

0 голосов
/ 09 мая 2018

Обычно вы должны сделать это так:

SELECT *
FROM (
    select 'A', 'B', 'C'
    union all
    select a, b, c from table
    ) t
INTO OUTFILE [...]

Обратите внимание, что вам нужно убедиться, что все типы данных столбцов правильно совпадают, то есть все они должны быть varchar или аналогичными.

Для заголовков вы можете автоматизировать их следующим образом:

SELECT * FROM (
SELECT MAX(CASE WHEN ORDINAL_POSITION = 1 THEN COLUMN_NAME END),
    MAX(CASE WHEN ORDINAL_POSITION = 2 THEN COLUMN_NAME END),
    MAX(CASE WHEN ORDINAL_POSITION = 3 THEN COLUMN_NAME END),
    MAX(CASE WHEN ORDINAL_POSITION = 4 THEN COLUMN_NAME END),
    MAX(CASE WHEN ORDINAL_POSITION = 5 THEN COLUMN_NAME END),
    MAX(CASE WHEN ORDINAL_POSITION = 6 THEN COLUMN_NAME END),
    [...]
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'ORDERS'
    AND TABLE_SCHEMA = 'REMOTE'
UNION ALL
SELECT [...]
) t
INTO OUTFILE [...]

Но вы все равно должны знать количество столбцов. Если вы хотите сделать это динамически, для этого по сути потребуется динамический SQL.

Может быть проще написать скрипт Python для этого .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...