【问题标题】:Sql query doesn't work properlySql 查询无法正常工作
【发布时间】: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 它会选择所有行(这是不对的)。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 2013-06-06
      相关资源
      最近更新 更多