在SQL中应用多个条件?

时间:2016-01-19 21:55:51

标签: sql conditional

我还没有找到类似的问题来寻找我正在寻找的答案。将多个条件应用于查询以排除某些信息的最佳方法是什么。 CaseBoolean

示例代码:

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)?

2 个答案:

答案 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条件就足够了。