Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


пятница, 17 октября 2014 г.

MySQL: убрать лишние столбцы из результатов, возвращаемых запросом

Вещь вполне штатная, хотя и не очевидная.

Есть скрипт, читающий сложную базу и формирующий на основе ее данных довольно широкую таблицу. Из-за особенностей SQL, в выдачу попадают не только "полезные" столбцы, но и всякие служебные, которые используются для формирования "полезных". Например, в нескольких "полезных" столбцах используются результаты одного и того же суб-запроса. Можно, конечно, воткнуть этот субзапрос несколько раз в нужных местах, но тогда при каждом его изменении придется выискивать все эти места и в каждое вносить правку. Чем это чревато, знает любой программист. Создавать хранимую процедуру тоже неудобно по техническим причинам. Остается присвоить результаты суб-запроса @-переменной и уже ее использовать везде, где нужен этот результат.
При этом, однако, сама @-переменная будет представлена в выводе в виде отдельного столбца. Ему можно присвоить пустое имя, но в выводе он всё равно будет. А зачем?

Решение лежит на поверхности, но до меня оно дошло только тогда, когда в OpenOffice я попробовал сделать запрос, использующий в качестве источника данных другой запрос. Спасибо Евгению Корейбе, который подкинул идею использовать скрипт-"обёртку"

Итак, всё очень просто: пишем скрипт-"обёртку" типа:

select нужные_поля from (наш_чрезмерно_информативный_скрипт)

Как именно подсунуть чрезмерно информативного (ЧИС) - это уже детали. В конце концов можно его тупо скопипастить внутрь текста "обёртки". При любом способе, "обёртка" будет возвращать только нужное подмножество данных и ошибка может вылезти только тогда, когда в "нужных_полях" окажется поле, которое ЧИС больше не возвращает. Все остальные ошибки ищем в тексте самого ЧИС.

Чего я не проверял, так это насколько глубоко можно вкладывать селекты.

Комментариев нет:

Отправить комментарий

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