SQL查询清理-和/或基于条件
我要做的是编写一个查询,它基于布尔值选择满足两个条件或至少满足其中一个条件的行 下面是一个简化的查询,用于完成任务。问题是,我的查询中的where子句要复杂得多,所以我正在寻找一种以更可读的方式重写它的方法 这可能吗SQL查询清理-和/或基于条件,sql,where,code-cleanup,Sql,Where,Code Cleanup,我要做的是编写一个查询,它基于布尔值选择满足两个条件或至少满足其中一个条件的行 下面是一个简化的查询,用于完成任务。问题是,我的查询中的where子句要复杂得多,所以我正在寻找一种以更可读的方式重写它的方法 这可能吗 declare @AndParam bit set @AndParam = 1 SELECT * FROM Table Where (@AndParam = 1 AND (Table.CategoryID = 3 AND Table.Age <
declare @AndParam bit
set @AndParam = 1
SELECT * FROM Table
Where
(@AndParam = 1
AND
(Table.CategoryID = 3
AND
Table.Age < 30))
OR
(@AndParam = 0
AND
(Table.CategoryID = 3
OR
Table.Age < 30))
编辑:
这个问题实际上是关于可读性和美学的。
除了Table.Age<30之外,还有五个额外的检查,包括子查询。实际上,这意味着我有大量代码重复,只有一个差异;和/或。
鉴于SQL很难阅读,我正在寻找解决办法。可能是这样的:
Where
CASE WHEN Table.CategoryID = 3 THEN 1 ELSE 0 END +
CASE WHEN Table.Age < 30 THEN 1 ELSE 0 END -- + more CASEs for each condition
>=
CASE WHEN @AndParam = 1 THEN 2 ELSE 1 END
--For more conditions, change 2 above to however many conditions there are
基本上,每个条件都给你一个1或0,然后把所有这些加起来,然后根据@AndParam是否达到条件总数或至少达到1进行最后检查。在我看来,这是最小的子句集,不能再减少了。如果@AndParam是布尔值,则可以编写@AndParam而不是@AndParam。但那只是句法上的糖分。