我有一个通过web-app中的用户界面动态生成的查询。用户可以在制作自定义报告时选择任意数量的过滤器,然后在SQL语句中将其转换为“Where”子句。
这些过滤器可以通过“And”或“Or”条件相互连接。 这可能会导致where子句如下:
SELECT
...
FROM
company c,
INNER JOIN team t,
INNER JOIN user u,
...
WHERE (c.trashed = 0)
AND (t.trashed = 0)
AND (u.trashed = 0)
AND (opp.fee_total_value = 10000)
OR (opp.fee_total_value > 5000)
--AND (c.trashed = 0)
--AND (t.trashed = 0)
--AND (u.trashed = 0)
AND (opp.fee_total_value < 6000)
OR (opp.fee_total_value > 8000)
--AND (c.trashed = 0)
--AND (t.trashed = 0)
--AND (u.trashed = 0)
AND (opp.fee_total_value < 9000)
ORDER BY ...
无论“OR”和“AND”条件的数量是多少,我都会在最初添加3个默认检查,然后在每个新的“OR”条款之后添加。这些是逻辑删除记录的条件 - .trashed = 0。
我正在寻找一种方法来执行此操作,而不必在用户请求的每个新“OR”后重复这3次'删除'检查。换句话说,我想找到一种方法来排除我在代码示例中注释掉的行。
答案 0 :(得分:0)
我认为你是这样的 -
WHERE (c.trashed = 0)
AND (t.trashed = 0)
AND (u.trashed = 0)
AND (opp.fee_total_value = 10000 OR opp.fee_total_value > 5000)
AND (opp.fee_total_value < 6000 OR opp.fee_total_value > 8000)
AND (opp.fee_total_value < 9000)
ORDER BY ...
但我不这么认为你可以实现你的结果。