MySQL-根据查询参数值从两个可选记录中选择一个值

时间:2019-03-18 11:20:05

标签: mysql sql

这是我的简化方案。 我在“ 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 个答案:

答案 0 :(得分:2)

您可以使用order bylimit

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

这假设(由您的问题暗示),表中每个商店ID只有一行。如果不是这种情况,则可能需要一个更复杂的版本:

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);

答案 1 :(得分:2)

这是使用LIMIT技巧的一种方法:

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

这里的窍门是,如果存在ID=10,则其记录将被保留。如果{em> em 不存在ID=10,但是存在ID=0,则该记录将被保留。否则,结果集将为空。

答案 2 :(得分:0)

请尝试这个。

SELECT (IFNULL((SELECT  store_id   FROM @tbl Where id = @store_id LIMIT 1),0))