Есть ли способ только SELECT
строки с определенными данными в столбце, без использования WHERE
?
например, если бы я имел это:
SELECT * FROM Users
WHERE town = 'Townsville'
Есть ли способ реализовать WHERE
предложение в SELECT
заявлении?
что-то вроде
SELECT *, town('Townsville') FROM Users
Это странный вопрос, но его задали мои коллеги.
sql-server
Джош Стивенсон
источник
источник
Ответы:
Не уверен, что это та сумасшедшая вещь, которую вы искали ....
Отказ от ответственности : я понятия не имею, почему вы хотели бы использовать это.
источник
Данные
Альтернативные решения
Сохранение дубликатов
Выход:
Для последнего примера:
Попробуйте это здесь: Stack Exchange Data Explorer
источник
GROUP BY
решений вы также можете добавить PK в список по группам (чтобы быть на 100% уверенным, что запросы возвращают то же количество строк, что и WHERE). Предполагая, конечно, что есть ПК;)Другой путь.
( Повторяет пример данных Пола Уайта )
источник
«Просто для удовольствия» вы можете использовать
order by
сtop(1) with ties
Это упорядочит все строки
Townsville
первым, так как регистр возвращает1
iftown = 'Townsville'
. Все остальные строки будут2
возвращены регистром.Предложение
with ties
заставляет запрос возвращать все строки, которые являются «связующими» для последнего места в возвращаемых строках. Использованиеtop(1)
в сочетании сwith ties
вернет все строки, которые имеют то же значение, что и первая строка в выражении, используемом в предложении order by.Обратите внимание, как указал Мартин Смит в комментарии, он вернет все строки, если вы попросите указать город, которого нет в таблице.
Если вы не боитесь XML-данных баз данных, вы можете использовать предикат в функции node ().
Заимствование установки у Пола Уайта.
Еще одна версия с которой
top
и наorder by
самом деле работает при поиске несуществующих городов.источник
У вас есть две разные вещи здесь.
Ограничит количество возвращаемых строк только теми, где town =
Townsville
Собирается передать литерал
Townsville
в функцию с именемtown
. Он не будет ограничивать строки, возвращаемые запросом, и фактически, если функция возвращает что-либо, кроме одного значения, вы получите ошибку.Есть и другие способы ограничить количество строк, которые вы получаете от запроса. Предложение HAVING, например. Но у него есть несколько других требований.
Или ВНУТРЕННЕЕ СОЕДИНЕНИЕ, хотя это немного странно, если у вас нет второй таблицы.
источник
Вот пример использования общего табличного выражения (CTE).
источник
Ну, вы могли бы сделать это:
Строго говоря, вы не используете предложение WHERE
источник
Вот
идиотский,совершенно логичный способ сделать это, которого я пока не вижу ...Я не могу себе представить, почему это не было первым предложенным предложением. :)
источник
Все города, кроме Таунсвилла, будут нулевыми. Проблема решена.
источник