Игнорировать инструкцию WHERE, основанную на условиях в MySQL - PullRequest
0 голосов
/ 11 октября 2018

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

  • , если col = "" THEN, вернуть всю таблицу
  • , иначе вернуть только те строки, где col = the given value

Пример:

col output

10     9
 9     8
 0    10

Если я хочу отфильтровать результаты по столбцу col, я могу сделать простое:

SELECT * FROM table
WHERE col = 10

, и я получу только те строки, в которых col = 10.

Но я хотел бы получить полную таблицу, если условие было col = ".

EDIT : К сожалению, я не могу использовать ключевое слово SET для установки переменных.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Откуда берется «заданное значение», если вы не можете поместить его в переменную?

Хранится ли оно в другой отдельной строке таблицы?Если это так, вы можете сделать это с помощью объединения:

select m.* from maintable m
join giventable g on 1=1
where g.givenvalue=''
or m.col=g.givenvalue

Или оно передается в качестве параметра хранимой процедуре или функции?Если это так, вы можете использовать почти точно синтаксис в первом ответе:

select * from maintable m
where param1=''
or m.col=param1
0 голосов
/ 11 октября 2018

Предполагая, что "заданное значение" содержится внутри пользовательской переменной или параметра:

WHERE @var = '' OR col = @var
WHERE :var = '' OR col = :var
WHERE ? = '' OR col = ?

Если вы каким-либо образом "строите" запрос, вы можете просто пропустить предложение where на основе ввода.

...