我有一个表,其中的记录结构与此类似。
ID角色ID
1 空
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”。
有谁知道如何构造一个选择来只给我一个记录?如果传递了 15 个,我只想要“2,15”;如果没有匹配,我只想要“1,NULL”。
请注意,实际查询有更多的 where 子句,因此将自身嵌套在自身内部将是一个非常大的查询。
最佳答案
如何使用 ORDER BY RoleID DESC 来选择 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 之前的版本,您必须将其分解为单独的插入。
关于SQL 查询Where 子句为空或匹配(仅返回1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1374751/