我正在开发一个必须为元素分配数字代码的应用程序.这个代码不是连续的,我的想法是不要将它们插入到数据库中,直到有相关的元素,但我想在sql问题中找到未分配的代码,我不知道该怎么做.
有任何想法吗?谢谢!!!
编辑1
表格可以这么简单:
code | element
-----------------
3 | three
7 | seven
2 | two
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:1,4,5,6.没有任何其他桌子.
编辑2
感谢您的反馈,您的答案非常有用.
NULL如果未分配代码,则会返回:
SELECT assigned_codes.code
FROM codes
LEFT JOIN
assigned_codes
ON assigned_codes.code = codes.code
WHERE codes.code = @code
Run Code Online (Sandbox Code Playgroud)
这将返回所有未分配的代码:
SELECT codes.code
FROM codes
LEFT JOIN
assigned_codes
ON assigned_codes.code = codes.code
WHERE assigned_codes.code IS NULL
Run Code Online (Sandbox Code Playgroud)
没有纯粹的SQL方法来完成你想要的东西.
在Oracle,您可以执行以下操作:
SELECT lvl
FROM (
SELECT level AS lvl
FROM dual
CONNECT BY
level <=
(
SELECT MAX(code)
FROM elements
)
)
LEFT OUTER JOIN
elements
ON code = lvl
WHERE code IS NULL
Run Code Online (Sandbox Code Playgroud)
在PostgreSQL,您可以执行以下操作:
SELECT lvl
FROM generate_series(
1,
(
SELECT MAX(code)
FROM elements
)) lvl
LEFT OUTER JOIN
elements
ON code = lvl
WHERE code IS NULL
Run Code Online (Sandbox Code Playgroud)