I have a int
column in my table in a SQL
database.
I keep some of codes in this table.
For sample range of my codes is : (1, 9).
I need to not use
Generate a list of numbers for your range (here I use VALUES
clause), then semi-join to the "used" list
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)
Edit:
You can replace the VALUES clause with any number table generation code. Examples:
IMHO you should maintain the list of valid codes in a look up table in the database and have the used codes as a foreign key field in the other table (MyTable in your post).
Assuming you have created a table to save codes with name LookUpTable that has a code id and code. In the other table, you have code id as foriegn key. Then, you can use following query:
SELECT LOOKUPTABLE.Code
FROM LOOKUPTABLE LEFT JOIN FOREIGNKEYTABLE ON LOOKUPTABLE.ID = FOREIGNKEYTABLE.CodeID
WHERE FOREIGNKEYTABLE.USERID IS NULL