Вопрос по mysql, sql – Столбец SQL WHERE = все

20

Может ли SQL сделать что-то вроде этого:SELECT * FROM table WHERE column = everything

Просто удалите эту часть строки. Если вы не заботитесь оcolumn значение - даже не ставьте егоwhere zerkms
Я только что столкнулся с той же проблемой, что и вы. Это кажется глупым снаружи (просто бросьтеwhere пункт), но было бы проще, если бы нужно было написать только один параметризованный запрос, а не набор условий. Любопытно, если что-то изменилось с 2012 года. Andrew Brown
если вам не нужен столбец, удалите все определение WHERE lukas.pukenis
О, боже, я такой тупой @zerkms. Я целый день боролся с тем, что частично положить для WHERE, чтобы соответствовать чему-то вроде *, и я просто понял, что мне просто нужно это удалить: D Luka
Я пытаюсь решить эту проблему для удобства. У меня есть 3 подготовленных утверждения, которые могут иметь или не иметь 3 переменные, объединенные в предложении where. Вместо того, чтобы писать несколько подготовленных операторов для комбинаций всех трех значений переменных (нуль, не ноль), я бы хотел игнорировать переменную в предложении where, если ее там нет. Foo

Ваш Ответ

7   ответов
9

Думаю, ты мог бы использовать подстановочный знак.

SELECT * FROM table WHERE column LIKE "%"
(Интересно, какой в этом смысл ... хотя, возможно, для некоторых хрупких генераторов SQL ...) user166390
Какой смысл в этом? Тогда простоSELECT * FROM table. Если вам не нужен фильтр, не используйтеWHERE оговорка. nico
Нет, ты не прав.= '%' означает «значение, в точности равное одному процентному символу» zerkms
Это очень полезно! Для тех, кто спрашивает почему, подумайте:SELECT * FROM table WHERE field='22' OR field LIKE '%'; Это вернет запасную строку, если нужная строка не найдена cronoklee
И ты снова ошибаешься, потому что это не будет включатьNULL значени zerkms
2

Ты можешь попробовать это.

where 
    isnull([column], '') = CASE WHEN @column IS NULL THEN isnull([column], '') ELSE @column END 
16

Вам нет дела до столбца: удалите его из предложения where (или полностью исключите предложение where, если это был единственный подпункт) Вы хотите, чтобы столбец был установлен, но вам все равно, что: ИспользуйтеWHERE column IS NOT nULL Вам нужен поиск, который также может отображать все записи из простого шаблона SQL:SELECT * FROM table WHERE column LIKE '%$searchterm%'
У меня есть эта проблема, и я не вижу ответа здесь. Моя интерпретация такова - у меня есть переменная, которую я использую для определения значения столбца. НО, если эта переменная 'all', я не ищу значение 'all', скорее, запрос действует как предложение WHERE. Я не хочу обязательно писать два запроса. Я ищу символ, например. '*', который ищет все. gavin
hi, MySQL. Я написал 2 запроса, но меня интересовало значение или символ, которые означают ВСЕ, так же, как OP gavin
@ gavin Какой у тебя язык программирования? Eugen Rieck
22
SELECT * FROM table

Если вы генерируете SQL динамически, это

SELECT * FROM table WHERE 1=1

The1=1 placeholder позволяет вам вернуть все записи или заменить фактическое условие, если вы возвращаете подмножество или вам нужны дополнительные условные операторы.

Смотрите такж
Почему кто-то использовал бы WHERE 1 = 1 И <условия> в предложении SQL?

Но если это подготовленный оператор, 1 = 1 не будет работать, поскольку он автоматически экранируется, нет? JayIsTooCommon
Если это готовое утверждение, разве у него уже нет ГДЕ? Robert Harvey♦
Мне нравится решение 1 = 1! KinoP
0

если у вас есть проблема, такая как SELECT * ОТ чего-то, ГДЕ (может быть что-то конкретное или все), например, фильтрация, вы можете использовать
SELECT * FROM something as s WHERE (?1 = 0 OR ?1 = s.type = ?1)
0 здесь просто предопределено для всех, так что не стесняйтесь менять, мне это нужно было при использовании репозиториев JPA с hibernate для фильтрации. Вы не можете сделать это с медицинской точки зрения, как это было предложено в предыдущем ответе из-за безопасности с подготовленными заявлениями Где? 1 соответствует:

  Page<Something> filterSometing(Long type,Pageable pageable);
4

кому по какой-либо причине НУЖНО имя столбца в запросе, хорошей альтернативой будетSELECT * FROM table WHERE column = column

Это очень похоже наWHERE 1=1, однако включает имя столбца, которое требуется для моего решения, и, возможно, потребуется еще несколько.

Это не работает для нулевых значений, что хорошо для моего случая составного ключа. Noumenon
Мое решение для проекта, который я унаследовал, нуждался именно в этом - Большое спасибо Andrew Birks
1

вы ищете оператор критериев IN? SELECT * из таблицы, где столбец в (1,2,3,4,5) или столбец в ('value', 'value2', 'value3');

Похожие вопросы