我还没有找到类似的问题来寻找我正在寻找的答案。将多个条件应用于查询以排除某些信息的最佳方法是什么。 Case
或Boolean
?
示例代码:
SELECT test,
testTypeID,
visitType,
submitted
FROM vReport
WHERE (vReport.submitted = 0 OR vReport.submitted IS NULL)
AND vReport.test IN ('Test 1','Test 2','Test 3')
我如何最好地编码以返回所有测试1,2和3,同时排除某些访问类型的行(例如,如果它是Test 3
则排除行,并且它是访问Week 26
和某个testTypeID
)?
答案 0 :(得分:0)
<>不确定您的列名和数据类型是针对visitWeek(假设这是一个INT)和testTypeID以及您希望过滤的值,但这里是它的逻辑:
SELECT test,
testTypeID,
visitType,
submitted
FROM vReport
WHERE (vReport.submitted = 0 OR vReport.submitted IS NULL)
AND vReport.test IN ('Test 1','Test 2','Test 3')
AND (vReport.test NOT IN ('Test 3') AND vReport.testTypeID NOT IN (some value) AND vReport.visitWeek <> 26)
答案 1 :(得分:0)
如果您可以均匀地定义排除项,则可以将它们存储在另一个表中。类似的东西:
<强> ExcludedTest 强>
excludedTestId
test
visitType
testTypeId
您的查询可以这样完成:
SELECT test,
testTypeID,
visitType,
submitted
FROM vReport VR
WHERE (vReport.submitted = 0 OR vReport.submitted IS NULL)
AND vReport.test IN ('Test 1','Test 2','Test 3')
AND NOT EXISTS ( SELECT 1 FROM ExcludedTest ET
WHERE ET.testTypeID = VR.testTypeID
AND ET.visitType = VR.visitType
AND ET.test = VR.test)
此外,如果您排除该OR,您应该有更好的表现。一种方法是将submitted
保留为NOT NULL
DEFAULT(0)
=&gt; vReport.submitted = 0
条件就足够了。