【问题标题】:how can put if condition in where clause如何将 if 条件放在 where 子句中
【发布时间】:2018-11-16 07:56:19
【问题描述】:

请不要与问题IF clause within WHERE clause 重复? 我认为我的问题是不同的,我已经尝试过,但在以下条件下我不能不成功。

如何将if条件放在sql中的where之间 例如

        SELECT *
        FROM LocationOutsw W
        WHERE if(@p_type = 'ALL') then
            (W.NAME LIKE '%'+ @p_search + '%' OR W.DESCRIPTION LIKE '%'+ @p_search + '%')
            if(@p_type == "NAME")
              W.NAME LIKE '%'+ @p_search + '%'
            if(@p_type == "DESCRIPTION ")
              W.DESCRIPTION LIKE '%'+ @p_search + '%')

【问题讨论】:

  • 您使用的是 MySQL、MS SQL Server 还是 Oracle?该查询将在其中一个上运行。

标签: sql sql-server


【解决方案1】:
SELECT *
FROM LocationOutsw W
WHERE ( @p_type = 'ALL'
    AND ( W.NAME LIKE '%'+ @p_search + '%'
            OR W.DESCRIPTION LIKE '%'+ @p_search + '%'
        )       
) 
OR (    @p_type = 'NAME'
    AND W.NAME LIKE '%'+ @p_search + '%'
)
OR ( @p_type = 'DESCRIPTION'
    AND W.DESCRIPTION LIKE '%'+ @p_search + '%'
)

但我强烈建议不要这样编写查询,因为您会得到错误的查询计划。

【讨论】:

    【解决方案2】:

    我会为此使用布尔表达式

        SELECT *
        FROM LocationOutsw W
        WHERE (@p_type = 'ALL' and W.NAME LIKE '%'+ @p_search + '%' OR W.DESCRIPTION LIKE '%'+ @p_search + '%')
            or (@p_type = 'NAME' and W.NAME LIKE '%'+ @p_search + '%') 
            or (@p_type = 'DESCRIPTION' and W.DESCRIPTION LIKE '%'+ @p_search + '%')
    

    注意语法。撇号与引号的含义不同。

    【讨论】:

      【解决方案3】:

      我会推荐这种方式..它会做得更好..

      SELECT 
        *
      FROM 
        LocationOutsw W
      WHERE 
         (@p_type = 'ALL' AND
         (W.NAME LIKE '%'+ @p_search + '%'  OR  W.DESCRIPTION LIKE '%'+ @p_search + '%'))
         OR
         (@p_type = 'NAME' AND W.NAME LIKE '%'+ @p_search + '%')
         OR
         (@p_type = 'DESCRIPTION' AND W.DESCRIPTION LIKE '%'+ @p_search + '%')
      

      '字符串的单引号不是"双引号..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多