我有表格IteamMaster
,查询如下,
Select ItemID from ItemMaster
Where ItemID IN(1,2,...,100)
此查询返回表格中的所有值,这些值现在可用,我想要的是什么 查询应该返回表中不存在的itemID,假设我的表有数据
ItemId ItemName
1 x
3 y
4 z
10 a
然后它必须返回除了IN()
条件值的1,3,4,10之外的所有项目ID?如何获得任何帮助的价值会很棒?
而且我的值是动态生成的,并且传递给查询查询也是动态生成的
答案 0 :(得分:2)
你无法在没有魔法的情况下获得魔法价值。无论您选择FROM,都必须包含所需的值。使用系统表master..spt_value
,您可以生成一长串值,并检查其中的数字,但不在表中...
;With Numbers as (
select ROW_NUMBER() OVER (ORDER BY number) as n
from master..spt_values
)
SELECT
*
FROM
Numbers
LEFT JOIN
yourTable
ON Numbers.n = yourTable.ItemId
WHERE
Numbers.n IN (1,2,...,100)
AND yourTable.ItemID IS NULL
或者...
;With Numbers as (
select ROW_NUMBER() OVER (ORDER BY number) as n
from master..spt_values
)
SELECT
*
FROM
Numbers
WHERE
Numbers.n IN (1,2,...,100)
AND NOT EXISTS (SELECT * FROM yourTable WHERE ItemID = Numbers.n)
有数百种方法可以创建初始数字列表。但你必须创造它。在您拥有 can 之前的数字列表之前,您无法选择不当前存在的数字。
答案 1 :(得分:0)
这个怎么样?
Select ItemID from ItemMaster Where ItemID NOT IN(1,2,...,100)