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 查询无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章