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

时间:2018-07-05 08:01:03

标签: mysql sql database

我需要按几种条件过滤任务表。

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.S。此外,该查询将与多个联接一起使用,并且很难在该查询的两个部分中重复联接和条件。

2 个答案:

答案 0 :(得分:2)

尝试一下

find . -name "*.zip" | xargs -P 5 -I fileName sh -c 'unzip -o -d "$(dirname "fileName")/$(basename -s .zip "fileName")" "fileName"'

答案 1 :(得分:0)

通常不建议在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 
      )