Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Несколько операторов where в большом выборе

Автор вопроса: DavidОтветов: 2

У меня есть 2 параметра поиска.

  • Я ничего не могу передать, и тогда я должен получить все строки из БД. ИЛИ я могу передать Param1 и получить строку, где ADB.param1=param1

  • ИЛИ я могу передать Param2 и получить строку, где ADB.param2=param2

  • ИЛИ я могу передать Param1 и Param2 и получить строку, где ADB.param1=param1 and ADB.param2=param2

Давайте представим, что у меня есть БД вроде

CarColor, CarType, CarEngineVolume, CarMakeName param1 is CarColor param2 is CarType, если я выбираю БД без отправки параметров, я должен получить весь список строк

красный,седан,2.0,Honda
синий,седан,3.0,Bmw
зеленый,пикап,4.0,Ford

Если я отправлю только param2, например, "седан", я должен получить следующий список

красный,седан,2.0,Honda

синий,седан,3.0,бмв

но если я отправлю оба параметра, например, param1 "красный" и param2 "седан", я должен получить только 1 строку

красный,седан,2.0,Honda

Если я имею дело только с одним параметром в моем where

WHERE (   (ADB.param1 = COALESCE(@param1, ADB.param1))

затем, когда я отправляю param1, я получаю только одну строку и все строки, если param1 имеет значение null и все в порядке

но когда я добавляю вторую проверку параметра

    WHERE (   (ADB.param1 = COALESCE(@param1, ADB.param1))
AND (BDB.param2 = COALESCE(@param2 , BDB.param2))  )

Я ничего не получаю при отправке только param1. Но я все еще должен получить 1 строку. Но ничего не получить :(

  • Вы отправляете пустую строку для @param2 или вы отправляете NULL? Andrew Morton 11.10.2018
  • если он равен нулю, я отправляю DBNull при добавлении параметров David 11.10.2018

nullsqlif-statementsql-serverwhere

Ответы

Ответ 1 · рейтинг 1 · Zaynul Abadin Tuhin

используйте OR вместо И

WHERE (   (ADB.param1 = COALESCE(@param1, ADB.param1))
OR (BDB.param2 = COALESCE(@param2 , BDB.param2))  )

Ответ 2 · Serkan Arslan

Вы можете использовать это.

WHERE ( ( @param1 IS NULL OR ( ADB.param1 = @param1 ))
    AND ( @param2 IS NULL OR ( BDB.param2 = @param2 ))
    AND ( ADB.param1 IS NOT NULL OR ADB.param2 IS NOT NULL ) )

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы