2016-01-19 3 views
0

Мне не удалось найти аналогичный вопрос для ответа, который я ищу. Каков наилучший способ применения нескольких условий к моему запросу, чтобы исключить определенную информацию. Case или Boolean?Применение нескольких условий в SQL?

Пример кода:

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) 
+0

И 'vReport.visitWeek <> 26' – joordan831

+0

@ joordan831 oops thanks! –

+0

Я по существу стараюсь, чтобы строка не появлялась, когда выполнялись два условия. Когда 'test =' Test 1 '' и 'visitType =' Week 26 '', тогда testTypeID не может быть равен 'ABC123'. –

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) =>vReport.submitted = 0 условия достаточно.

Смежные вопросы