内连接中的约束公式

时间:2014-05-29 05:42:26

标签: sql sql-server tsql sql-server-2008-r2

我遇到以下问题。看看这部分查询

inner join tObjClassifier azoc WITH (NOLOCK index=XAK1tDepClassifier)
             on azoc.ObjType = 8
        and azoc.ParentID = @ObjClassifierID
                    and azoc.Brief = azfo.Brief
                    and case 
                          when PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param) is null then azn.NodeType = 2 
                          else PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param)>0 
                        end

在这里,我对这部分感兴趣

and case 
                          when PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param) is null then azn.NodeType = 2 
                          else PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param)>0 
                        end

如何在不出错的情况下完成此部分。简而言之,如果条件PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param)>0 不满意,忽略此条件并使用此azn.NodeType = 2条件。感谢。

我们也可以重新排列上述条件:

and case 
                          when ltrim(rtrim(azn.Brief)) = azoc.Param is null then azn.NodeType = 2 
                          else ltrim(rtrim(azn.Brief)) = azoc.Param) 
                        end

1 个答案:

答案 0 :(得分:1)

PATINDEX返回指定表达式中第一次出现模式的起始位置,如果未找到模式则返回零。因此,请尝试使用OR条件:

 ...

 and azoc.Brief = azfo.Brief
 and 
   (
     (PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param)>0)
     OR 
     (azn.NodeType = 2)
    )