大选择中的多个 where 语句



我有 2 个搜索参数。

  • 我什么都不能传递,然后我必须从数据库获取所有行。 或者我可以通过 Param1 并在ADB.param1=param1的地方获得行

  • 或者我可以通过 Param2 并在ADB.param2=param2的地方获得行

  • 或者我可以传递 Param1 和 Param2 并在ADB.param1=param1 and ADB.param2=param2的地方获得行

让我们想象一下我有数据库喜欢

汽车颜色,汽车类型,汽车发动机体积,汽车品牌名称 param1 is CarColor 参数2 是 CarType 如果我选择数据库而不发送参数,我必须获取整个行列表

红色,轿车,

2.0,本田
蓝色,轿车,3.0,宝马
绿色,皮卡,4.0,福特

如果我只发送参数2,例如"轿车" 我必须得到以下列表

红色,轿车,2.0,本田

蓝色,轿车,3.0,宝马

但是如果我发送两个参数,例如参数1"红色"和参数2"轿车" 那么我必须只得到 1 行

红色,轿车,2.0,本田

如果我只处理我 where 中的一个参数

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

然后当我发送 param1 时,如果 param1 为空并且它正常,我只会得到一行和所有行

但是当我添加第二个参数检查时

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

仅发送参数1时我一无所获。 但我仍然必须得到 1 行。但一无所获:(

改用ORAND

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

你可以使用它。

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

相关内容

  • 没有找到相关文章

最新更新