Sql 查询无法正常工作

Posted

技术标签:

【中文标题】Sql 查询无法正常工作【英文标题】:Sql query doesn't work properly 【发布时间】:2011-03-08 10:19:37 【问题描述】:

有一个表Category(ID、title、description、parentID、friendlyUrl、categoryTypeID)。 字段值 parentID 可以为空。

如果@ParentID = null,我如何选择只有 parentID =null 的行。

  declare @ID int =null 
  declare @FriendlyUrl nvarchar(30) = null 
  declare @ParentID int = null 
  declare @CategoryTypeID int = 0


    select * from Category
     where
    (@ID is null or ID = @ID) 
    and (@FriendlyUrl is null or FriendlyUrl=@FriendlyUrl)
    and (@ParentID is null or ParentID=@ParentID) 
    and (@CategoryTypeID is null or CategoryTypeID=@CategoryTypeID)

如果@ParentID = 指定的 int 值,则此查询将选择所有具有 parentID=@ParentID 的行(这是正确的)。

但是如果@ParentID =null 它会选择所有行(这是不对的)。

【问题讨论】:

【参考方案1】:

你的错误在这里:

and (@ParentID is null or ParentID=@ParentID) 

当@ParentID == null 时,该等式的第一部分为真,并且由于 OR 语句,布尔逻辑的第二部分不再重要并被忽略。

这就是 AdaTheDev 的答案适用于 @ID For @ParentID 你需要的原因:

and ((@ParentID is null AND ParentID is null) or (@ParentID not is null AND ParentID = @parentID))

【讨论】:

+1 删除了我的答案,因为我错误地解决了错误的字段:) 嗯,真的应该对所有领域都这样做,正如我所期望的那样。【参考方案2】:

这个怎么样...或者我没有正确理解你的问题?

select * from Category where (@ID is null or ID = @ID) and (@FriendlyUrl is null or FriendlyUrl=@FriendlyUrl) and (NOT(@ParentID is null) or ParentID=@ParentID) ' added NOT here and (@CategoryTypeID is null or CategoryTypeID=@CategoryTypeID)

【讨论】:

以上是关于Sql 查询无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

SQL“分区”检查无法正常工作

SQL语法异常 - 无效字符,但查询工作正常

T-SQL 动态枢轴无法正常工作

查询无法正常工作(可能是语法问题)

数据表过滤器在应用SQL Server 2008分页代码时无法正常工作

SQL 无法让 WHERE EXISTS 子句正常工作,并且仅返回在特定日期内具有客户端类型的行