2015-05-12 3 views
0

Я бегу несколько запросов SQL из командной строки следующим образом:печати MySQL имена столбцов для пустого набора результатов

cat my_query.sql | mysql --defaults-file=my_conf.cnf 

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

Например мой запрос:

-- id=-1 doesn't exist 
SELECT col1, col2 FROM table WHERE id=-1 

мне нужен этот запрос, чтобы вернуть

col1 col2 

Вместо этого он ничего не возвращает. Можно ли это сделать, используя исключительно mysql и стандартные команды unix?

Спасибо.

+0

Вы можете взять запрошенный запрос и UNION ALL, чтобы «фиктивный» SELECT эмулировал пустую строку после него. Результаты UNION используют типы данных и имена столбцов первого запроса UNION. – Uueerdo

+0

Думаю, вы предлагаете добавить фиктивный SELECT, например SELECT '', ''. Это сработает, но затем оно добавит новую строку и несколько символов табуляции в конце результатов. Это не самое чистое решение, но оно может работать. Я искал вариант команды mysql для этого, но может и не быть. Благодарю. – burhan

+0

Да, это не идеальное решение, но если у вас всегда есть это, вы знаете, что всегда игнорируете последнюю строку, или вы можете дать вашему манекену SELECT некоторые вопиющие значения «флага», такие как '' [cmdlinedummy] ''для строк. – Uueerdo

ответ

2

Добавление UNION ALL к ВЫБРАТЬ с «соской»/пустые данные могут работать:

SELECT col1, col2 FROM table WHERE id=-1 
UNION ALL 
SELECT '', '' -- OR 0, 0 whatever is appropriate 
; 

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

+0

Я использовал вашу идею и добавил ее, чтобы удалить последнюю строку. "| sed '$ d'" – burhan

Смежные вопросы