Исключение некоторых столбцов в операторе SELECT - PullRequest
2 голосов
/ 02 октября 2009

В результате для

SELECT * from myTable WHERE <em>some-condition</em>;

Меня интересуют 9 из 10 существующих столбцов. Единственный выход - указать 9 столбцов явно?

Я не могу как-то указать только столбец, который не хочу видеть?

Ответы [ 6 ]

11 голосов
/ 02 октября 2009

Единственный способ - перечислить все 9 столбцов.

Например:

SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9 FROM myTable
3 голосов
/ 02 октября 2009

Нет, вы не можете. Примером списка выбора для Sybase может быть , найденный здесь , вы можете легко найти другие для других БД

Причиной этого является то, что стандартные методы выбора - "*" (он же все столбцы) и список столбцов - это определенные операции в реляционной алгебре , тогда как исключение из столбцов не

Кроме того, как уже упоминалось в комментарии Джо, обычно рекомендуется явно указывать список столбцов, а не "*" даже при выборе всех столбцов.

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

Однако при выборе без объединения из очень широкой и часто изменяющейся таблицы приведенное выше правило может не применяться, поскольку наличие «*» обеспечивает хорошее управление изменениями (ваш запрос на одно место меньше для исправления и освобождения, когда добавление новых столбцов), особенно если у вас есть гибкий код извлечения БД, который может динамически работать с набором столбцов из определения таблицы вместо того, что указано в коде. (например, 100% наших экстракторов и загрузчиков полностью работают при добавлении нового столбца в БД).

2 голосов
/ 02 октября 2009

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

Не стоит проблем с производительностью, путаницы и обслуживания, которые могут возникнуть.

1 голос
/ 02 октября 2009

На самом деле вам нужно явно указать столбцы (как сказал Люк, это хорошая практика), и вот причина:

Допустим, вы пишете код / ​​сценарии вокруг ваших SQL-запросов. Теперь у вас есть 50 различных вариантов выбора в разных местах вашего кода.

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

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

  • Вы явно указали столбцы в каждом запросе: добавление столбца является обратно совместимым изменением, просто закодируйте новую функцию и покончите с этим.
  • Вы использовали оператор '*' для нескольких запросов: вы должны отследить их и изменить их все. Забудь об одном, и это будет твоя могила.

О, и я указал, что запрос с селектором '' требует больше времени для выполнения, так как БД фактически должна запросить модель и разработать селектор ''?

Мораль: используйте селектор '*' только тогда, когда вы проверяете вручную, в порядке ли ваши столбцы (в этот момент вам действительно нужно все проверять), в коде, просто проклинайте их, или они станут вашей гибелью.

0 голосов
/ 02 октября 2009

В конце концов, вам нужно указать все 9 из 10 столбцов отдельно - но есть помощь по инструментам, которая поможет вам сделать это проще!

Ознакомьтесь с SQL-подсказкой Red-Gate , которая является надстройкой intellisense для SQL Server Management Studio и Visual Studio.

Среди множества других вещей, вы можете набрать

SELECT * FROM MyTable

и затем вернитесь назад, поместите курсор после «*» и нажмите TAB - тогда он перечислит все столбцы в этой таблице, и вы сможете настроить этот список (например, удалить несколько ненужных вам столбцов) ).

Абсолютно бесценен - ​​экономит часы и часы бессмысленного набора текста! Я бы сказал, что стоит цена лицензии.

Настоятельно рекомендуется!

Марк

0 голосов
/ 02 октября 2009

Нет, вы не можете (по крайней мере, ни на одном из известных мне диалектов SQL).

Рекомендуется явно указывать имена столбцов, а не SELECT *.

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