Динамические условия Where с IIF и IsNull в SQL MS-Access

#sql #ms-access

#sql #ms-access

Вопрос:

Можно ли написать предложение WHERE с условием IIF и IsNull в SQL MS-ACCESS? т.е.:

ВЫБЕРИТЕ Table1.colx,…. ИЗ ((Таблица1 ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ Таблицы2 НА Table1.col1=Table2.col1) ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ Таблицы3 НА Table3.col2=Table2.col2) ГДЕ IIF(IsNull(Table1.colx=’someValue1′),Table1.colx=’someValue2′,Table1.colx=’someValue1′)

Комментарии:

1. Хотя это возможно, запрос не имеет смысла. Если Table1.colx='someValue1' бы было null , то было бы Table1.colx='someValue2 и Table1.colx='someValue1' .

2. вы абсолютно правы, не имеет смысла. То, что я пытаюсь сделать, это если (TablTe1.colx=’someValue1′ И Table1.colx=’someValue2)=TRUE, тогда возьмите только TablTe1.colx=’someValue1′, если (TablTe1.colx=’someValue1′ =FALSE И Table1.colx=’someValue2=TRUE) возьмите Table1.colx=’Только someValue2 . но я этого не понимаю…

Ответ №1:

Вы почти никогда не хотите использовать IIF в WHERE предложении. Просто используйте AND , OR , и круглые скобки.

Из вашего комментария решение кажется простым:

 WHERE (TablTe1.colx='someValue1' AND Table1.colx='someValue2' AND TablTe1.colx='someValue1')
OR  ((TablTe1.colx <> 'someValue1' OR Table1.colx <> 'someValue2') AND  Table1.colx='someValue2')