如果一级条件匹配,无论二级条件匹配与否,都根据一级条件返回结果,如果不匹配结果,则根据二级条件返回数据库。
以兑换外币为例,我有一个汇率表,我需要得到美元对英镑的汇率,如果没有,就得到英镑对美元的汇率。如果两者都有,只返回美元:英镑。
id origin_currency target_currency rate_from rate_to
1 1 2 1 0.75
2 2 1 1 1.34
对于以上数据,查询sql应该只返回第一条记录。
我可以使用下面的 sql 来得到我想要的:
select * from exchange_rate
where origin_currency = 1 and target_currency = 2
union
select * from exchange_rate
where origin_currency = 2 and target_currency = 1
limit 1
但是,还有其他更好的解决方案吗?
最佳答案
您可以获得所有相关行,按 origin_currency = ? DESC
和限制行数(或者只从结果中读取第一行)。看这个SQL Fiddle .
SELECT
*
FROM
currency
WHERE
(origin_currency = 1 AND target_currency = 2) OR
(origin_currency = 2 AND target_currency = 1)
ORDER BY
origin_currency = 1 DESC
LIMIT
1
关于mysql select 基于初级条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47870177/