Oracle DB простой SELECT, где важен порядок столбцов - PullRequest
0 голосов
/ 28 февраля 2009

Я делаю простой оператор SELECT в БД Oracle, и мне нужно выбрать столбцы в несколько определенном порядке. Пример:

Таблица A имеет 100 атрибутов, одним из которых является «глава», которая встречается где-то в порядке столбцов в таблице. Мне нужно сначала выбрать данные с «главой» и оставшимися столбцами в произвольном порядке. По сути, мое утверждение должно читаться примерно так:

SELECT a.chapter, a. *the remaining columns* FROM A

Кроме того, я не могу просто набрать:

SELECT a.chapter, a.*

потому что это выберет «главу» дважды.

Я знаю, что оператор SQL кажется простым, но если я знаю, как решить эту проблему, я могу экстраполировать эту мысль на более сложные области. Кроме того, давайте предположим, что я не могу просто прокрутить колонку «главы» и перетащить ее в начало.

Спасибо.

Ответы [ 6 ]

7 голосов
/ 28 февраля 2009

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

Это означает, что у вас есть для указания каждого нужного столбца.

6 голосов
/ 28 февраля 2009

Лучше всего просто явно выбрать каждый столбец.

5 голосов
/ 28 февраля 2009

Быстрый способ обойти это - SELECT a.chapter AS chapterCol, a. * FROM table a; Это означает, что будет один столбец с именем chapterCol (при условии, что там уже нет столбца с именем chapterCol.;))

4 голосов
/ 01 марта 2009

Если вы собираетесь встраивать 'SELECT *' в программный код, я настоятельно рекомендую не делать этого. Как отмечали предыдущие авторы, вы настраиваете код на разрыв, если столбец добавляется (или удаляется) из таблицы. Простой совет: не делай этого.

Если вы используете это в инструментах разработки (просмотр данных и т. П.). Затем я бы порекомендовал создать представление с нужным вам порядком столбцов. Захватите вывод из SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS и создайте оператор выбора для представления с нужным вам порядком столбцов.

2 голосов
/ 28 февраля 2009

Так я бы построил ваш запрос без необходимости ввода всех имен, но с некоторыми ручными усилиями.

Начните с "Выберите a.chapter"

Теперь выполните еще один выбор в вашей базе данных следующим образом:

выберите ',' || column_name из user_tab_cols где table_name = your_real_table_name и column_name <> 'CHAPTER';

Теперь возьмите вывод, вырезанный и вставленный, и добавьте его к тому, с чего начали Теперь запустите этот запрос. Это должно быть то, что вы просили.

Та-да!

0 голосов
/ 28 февраля 2009

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

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