MySQL выполнить SELECT в зависимости от условия - PullRequest
1 голос
/ 16 апреля 2019

Как правильно использовать CASE для выполнения запроса SELECT на основе пользовательского ввода?

При выполнении следующего запроса:

SELECT 
    CASE WHEN user_input_variable = 'y' THEN        
    (SELECT * FROM table_foo WHERE bar = '6f322766-0ec0-4d24-840f-c857a82a6efe')        

    ELSE
    (SELECT 0)
     END

Если пользователь выбрал 'y', он должен вернуть записи из таблицы, в противном случае он должен вернуть пустой набор результатов.

Я получаю ошибку:

Операнд должен содержать 1 столбец (столбцы)

Ответы [ 2 ]

3 голосов
/ 16 апреля 2019

Подзапрос должен возвращать не более 1 столбца.Вместо этого делайте UNION ALL.

Обратите внимание, что количество столбцов должно быть одинаковым, поэтому вам нужно выбрать нули во втором выборе.

SELECT * FROM table_foo WHERE bar = '6f322766-0ec0-4d24-840f-c857a82a6efe')
    and user_input_variable = 'y' 
union all     
SELECT 0, null, null... where user_input_variable <> 'y' 
0 голосов
/ 16 апреля 2019

Вы также можете использовать условие ЕСЛИ.

IF user_input_variable = 'y'
    SELECT * FROM table_foo WHERE bar = '6f322766-0ec0-4d24-840f-c857a82a6efe')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...