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

标签 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 查询参数不存在记录时才返回。这就是它背后的逻辑。

最佳答案

您可以使用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);

关于MySQL - 根据查询参数值从两个可选记录中选择一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55220197/

相关文章:

PHP 不会向 mysql 发送数据!? ( undefined variable 错误)

mysql - .NET MVC 3,自动生成/映射模型架构到 Mysql 中?

sql - 对于长时间运行的报告,我是使用只读事务还是可序列化事务?

java - 如何使用 LIKE SelectionArgs 将 rawQuery() 转换为 query()

mysql - 我如何通过已经使用索引的查询来加速分组?

mysql - 如何计数和回显值

mysql - 根据mysql中时区的当前时间排序

sql - 不一致的 SQL Server 执行计划键查找

sql - 编写一个查询,给出用户 DDD 和 FFF 的共同好友名称。另外,请注意,如果 A 是 B 的 friend ,则 B 也是 A 的 friend

sql - 如何在 PostgreSQL 中转换这些数据