我需要按几种条件过滤任务表。
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。此外,该查询将与多个联接一起使用,并且很难在该查询的两个部分中重复联接和条件。
答案 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
)