mysql select 基于初级条件

标签 mysql

如果一级条件匹配,无论二级条件匹配与否,都根据一级条件返回结果,如果不匹配结果,则根据二级条件返回数据库。

以兑换外币为例,我有一个汇率表,我需要得到美元对英镑的汇率,如果没有,就得到英镑对美元的汇率。如果两者都有,只返回美元:英镑。

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/

相关文章:

php - 如果有 2 个同名的列,如何在左连接中选择一个列? [MySql]

mysql - 如何在位列上对 MySQL 表进行分区,并在结果分区上进行子分区

mysql - 如何包含连接列值为 0 的 JOINS 中排除的行?

php - 数据库查询重定向到主目录

mysql - 有效地选择前 n 行

mysql - #1054 - 'content_type_video.field_video_file_fid' 中的未知列 'field list'

php - 插入mysql表的问题

mysql替换字符串的一部分

php - MySQL-如何在所有用户的帐户中插入值

MySQL:在 JOIN 中合并