выберите столбцы, где предложение или, если нет условия, выберите все столбцы

У меня есть table в MySQL следующим образом:

Я пробовал следующие запросы:

select * from test.score_card where playerId in(2,3);

select * from test.score_card where playerId not in(0);

Таблица:score_card

Мне нужен однострочный запрос, чтобы он отображал вывод, как если бы я передал

playerId в предложении WHERE IN, тогда он должен отображать выбранные строки ИЛИ, если я

не передавайте какое-либо значение, тогда он должен выбрать все строки.


person Shambhu    schedule 20.06.2017    source источник
comment
Как ты это называешь? Это необработанный SQL-запрос или он основан на пользовательском вводе и впоследствии передается в базу данных? Если он основан на пользовательском вводе и ничего не передается, вы можете использовать идентификатор в объединении (входная строка, идентификатор) и передать 2,3,4,x, и он скажет, если есть значение в входной строке, используйте его, иначе сопоставьте, где каждый идентификатор в таблице соответствует самому себе. И еще: 0 не значит, что не существует. NULL означает отсутствие значения. В приведенной выше таблице нет 0, и вы могли бы так же легко заменить, а идентификатор не равен нулю, что бессмысленно, поскольку идентификатор находится в вашем ПК.   -  person T Gray    schedule 21.06.2017


Ответы (1)


так или ЗАЯВЛЕНИЕ?

select * from test.score_card 
where (playerId in(2,3)) or (playerId not in(0));

Или более сложный, который будет возвращать второй набор только в том случае, если счетчик равен 0 в первом наборе:

SELECT * FROM test.score_card
WHERE playerId in (2,3)
UNION
SELECT * FROM test.score_card
WHERE (
SELECT count(*) FROM test.score_card
WHERE playerId in (2,3))=0 AND playerId not in (0);

(не проверено, может быть опечатка)

person Norbert van Nobelen    schedule 20.06.2017
comment
Здесь он выбирает все строки из-за not in(0) . Но если я передам playerId, тогда он должен выбрать совпавший id. Если я не передам playerId, он должен выбрать все строки. - person Shambhu; 20.06.2017
comment
Не передавать playerId (например, без значения) нельзя с помощью SQL. Вместо этого вам придется перейти к хранимой процедуре, которая имеет операторы IF для проверки). Или посмотрите на мою отредактированную версию и добавьте фиктивное значение в свой, когда у вас нет данных, тогда эта версия может хорошо работать для вашего случая. - person Norbert van Nobelen; 20.06.2017
comment
Ну, я искал однострочный запрос, если это невозможно, то я пойду на процедуру. Вы можете помочь в этом? благодаря. - person Shambhu; 20.06.2017
comment
stackoverflow.com/questions/7566948/ должна чтобы вы начали. Он содержит всю логику, которую вы ищете (не слишком много :)) - person Norbert van Nobelen; 20.06.2017