如何避免mysql查询中出现重复子句

mbyulnm0  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(243)

我需要按几个条件筛选我的任务表。

select * from tasks where initialPrice > 20 where status = 3

但是如果这个任务属于userid=1(例如)-我需要用其他附加状态(status=1和status=5)来选择它。所以我的变种是: select * from tasks where initialPrice > 20 and status = 3 or (status = 1 or status = 5 and userId = 5 and initialPrice > 20) 有没有可能避免条件的重复?构建此查询的最佳方法是什么?
p、 进一步说,这个查询将和多个联接一起使用,在这个查询的两个部分中很难复制联接和条件。

vc9ivgsu

vc9ivgsu1#

使用 case 中的表达式 where 一般不鼓励使用这个条款。一个原因是它使查询更难优化。第二个原因是,将这些条件限制为布尔逻辑对人们来说更容易理解。
所以,我建议:

select t.*
from tasks t
where initialPrice > 20 and status = 3 and
      (userId <> 1 or status in (1, 5);

或:

select t.*
from tasks t
where initialPrice > 20 and
      (user = 1 and status in (1, 3, 5) or
       user <> 1 and status = 3 
      )
xzv2uavs

xzv2uavs2#

试试这个

select * from tasks 
where initialPrice > 20 
and case when status = 3 Then 1 when status in (1,5) and userId = 5 Then 1 else 0 end = 1

相关问题