我有一张表格,其记录的结构与此类似。
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”如果没有匹配。
注意,实际的查询在其中包含了更多的子句,因此将其自身嵌套在一个非常大的查询中。
答案 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