代码之家  ›  专栏  ›  技术社区  ›  David

大select中的多个where语句

  •  1
  • David  · 技术社区  · 7 年前

    我有两个搜索参数。

    • 我不能传递任何内容,然后我必须从DB获取所有行。 或者我可以通过Param1,到哪里去 ADB.param1=param1

    • ADB.param2=param2

    • 或者,我可以传递Param1和Param2,然后在何处获得行 ADB.param1=param1 and ADB.param2=param2

    CarColor、CarType、CarEngineVolume、CarMakeName param2是CarType 如果我选择DB而不发送参数,我必须得到整个行列表


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

    我必须得到下面的清单

    红色,轿车,2.0,本田

    但如果我同时发送两个参数,例如param1“red”和param2“sedan”

    红色,轿车,2.0,本田

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

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

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

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

    只发送参数1时,我什么也得不到。 但我仍然必须得到1排。但什么也得不到:(

    2 回复  |  直到 7 年前
        1
  •  1
  •   Zaynul Abadin Tuhin    7 年前

    使用 OR

    WHERE (   (ADB.param1 = COALESCE(@param1, ADB.param1)) 
    OR (BDB.param2 = COALESCE(@param2 , BDB.param2))  )
    
        2
  •  0
  •   Serkan Arslan    7 年前

    你可以用这个。

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