несколько где заявления в большой выбор - PullRequest
0 голосов
/ 11 октября 2018

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

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

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

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

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

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

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

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

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

синий,седан, 3.0, Bmw

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

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

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

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 ) )
0 голосов
/ 11 октября 2018

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

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