MySQL - ВЫБЕРИТЕ одно значение из двух необязательных записей на основе значения параметра запроса - PullRequest
0 голосов
/ 18 марта 2019

Вот мой упрощенный сценарий.У меня есть записи БД в таблице 'store_config':

ID  store_id   value
1   0           val1
2   10          val2
3   7           val3
4   99          val4

Все записи необязательны - могут существовать или не существовать.

Столбец store_id уникален.

Я хочузапустите запрос:

WHERE store_id=?

Чтобы: запрос должен возвращать значение, соответствующее store_id, из параметра запроса, если оно существует, в противном случае возвращать значение, соответствующее store_id 0, если оно существует.

storeId= 0 запись считается значением по умолчанию и возвращается только в том случае, если для предоставленного параметра запроса storeId не существует существующей записи.Это логика за этим.

Ответы [ 3 ]

2 голосов
/ 18 марта 2019

Вот один подход, использующий трюк LIMIT:

SELECT ID, store_id, `value`
FROM store_config
WHERE store_id IN (0, 10)
ORDER BY store_id DESC
LIMIT 1;

Хитрость здесь в том, что если присутствует ID=10, то его запись будет сохранена.Если ID=10 отсутствует , но ID=0, эта запись будет сохранена.В противном случае набор результатов будет пустым.

2 голосов
/ 18 марта 2019

Вы можете использовать order by и limit:

select t.*
from t
where store_id in (@store_id, 0)
order by store_id desc
limit 1;

Это предполагает (как подразумевается ваш вопрос), что в таблице есть только одна строка для каждого идентификатора магазина.Если это не так, вам может потребоваться более сложная версия:

select t.*
from t
where store_id = @store_id
union all
select t.*
from t
where store_id = 0 and
      not exists (select 1 from t t2 where t2.store_id = @store_id);
0 голосов
/ 18 марта 2019

Пожалуйста, попробуйте это.

SELECT (IFNULL((SELECT  store_id   FROM @tbl Where id = @store_id LIMIT 1),0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...