获取表中不存在的值?

时间:2013-12-10 11:30:42

标签: sql sql-server sql-server-2008 exists

我有表格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?如何获得任何帮助的价值会很棒? 而且我的值是动态生成的,并且传递给查询查询也是动态生成的

2 个答案:

答案 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)