如何选择此示例中未使用的代码

时间:2012-08-14 08:31:39

标签: sql sql-server sql-server-2008 select

我的表中int数据库中有一个SQL列。 我在这张表中保留了一些代码。 我代码的样本范围是:(1,9)。
我不需要在这个范围内使用代码。

例:
使用的代码是:

Select code from MyTable  -- result is 2,6,7,8,9

未使用的代码是:1,3,4,5

现在,我该如何选择此代码?预期结果为:1,3,4,5

2 个答案:

答案 0 :(得分:4)

为您的范围生成一个数字列表(这里我使用VALUES子句),然后半连接到“used”列表

SELECT
    *
FROM
   (VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9)) X (Num)
WHERE
   NOT EXISTS (SELECT * FROM MyTable M WHERE M.Code = X.Num)

编辑:

您可以将VALUES子句替换为任何数字表生成代码。 例子:

答案 1 :(得分:1)

恕我直言,您应该在数据库的查找表中维护有效代码列表,并将使用过的代码作为另一个表中的外键字段(帖子中的MyTable)。

假设您已创建一个表来保存名称为LookUpTable且具有代码ID和代码的代码。在另一个表中,您的代码ID为foriegn key。然后,您可以使用以下查询:

SELECT  LOOKUPTABLE.Code 
FROM    LOOKUPTABLE LEFT JOIN FOREIGNKEYTABLE ON LOOKUPTABLE.ID = FOREIGNKEYTABLE.CodeID 
WHERE FOREIGNKEYTABLE.USERID IS NULL