SQL查询Null OR Match的子句(仅返回1)?

时间:2009-09-03 17:11:53

标签: sql sql-server tsql

我有一张表格,其记录的结构与此类似。

ID RoleID
1 NULL
2 15
3 16

我写了一个where子句来获取如下的记录

SELECT * from TableX 
WHERE (RoleID = 2 OR RoleID IS NULL)

这让我记录了“1,NULL”

但如果我查询

SELECT * from TableX 
WHERE (RoleID = 15 OR RoleID IS NULL)

我回来了“1,NULL”和“2,15”。

有谁知道如何构建一个select只给我一条记录?我只想要“2,15”如果15被传递,“1,NULL”如果没有匹配。

注意,实际的查询在其中包含了更多的子句,因此将其自身嵌套在一个非常大的查询中。

3 个答案:

答案 0 :(得分:3)

使用ORDER BY RoleID DESC

选择SELECT TOP 1怎么样?

这是一个工作示例。

declare @mytable table
(
    ID int null,
    RoleID int null
)
insert @mytable values
(1, null),
(2, 15),
(3, 1)

select TOP 1 * 
from @mytable 
WHERE (RoleID = 2 OR RoleID IS NULL)
order by RoleID desc


select top 1 * from @mytable 
WHERE (RoleID = 15 OR RoleID IS NULL)
order by RoleID desc

修改(根据收到的评论进行编辑)
请注意,Insert语句仅适用于SQL Server 2008.对于2008之前的版本,您必须将其分解为invidual插入。

答案 1 :(得分:0)

SELECT TOP 1 * from TableX WHERE (RoleID = 15 OR RoleID IS NULL)
ORDER BY RoleID DESC

答案 2 :(得分:0)

order by RoleID limit 1