这是我的简化场景。 我在“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 查询参数不存在记录时才返回。这就是它背后的逻辑。
最佳答案
您可以使用order by
和limit
:
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);
关于MySQL - 根据查询参数值从两个可选记录中选择一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55220197/