如何编写执行以下操作的单个选择语句:
我的表中有一个整数列,我想在该列中找到最小可用(未使用)值,其中该值低于 1000,并且该值在 TableB Column1 中不存在
谢谢
如何编写执行以下操作的单个选择语句:
我的表中有一个整数列,我想在该列中找到最小可用(未使用)值,其中该值低于 1000,并且该值在 TableB Column1 中不存在
谢谢
类似于 LukeH 的答案,但它可以满足您的要求:
SELECT MIN(a.your_column) - 1 AS answer
FROM your_table AS a
LEFT JOIN your_table AS a2
ON a2.your_column = a.your_column - 1
LEFT JOIN tableB AS b
ON a.your_column = b.column1
WHERE a.your_column < 1000
AND b.column1 IS NULL
AND a2.your_column IS NULL
编辑:
UNION
SELECT MIN(a.your_column) + 1 AS answer
FROM your_table AS a
LEFT JOIN your_table AS a2
ON a2.your_column = a.your_column + 1
LEFT JOIN tableB AS b
ON a.your_column = b.column1
WHERE a.your_column < 1000
AND b.column1 IS NULL
AND a2.your_column IS NULL
并选择两个值的最小值。
它仍然需要检查值 1 是否可用,但如果 A 和 B 之间有差距,它现在应该找到 A+1 和 B-1,你可以选择最小的。显然 A+1 是最小的,所以你可以只使用第二部分......
结果为 7,我相信根据您的标准,这将是正确的答案
CREATE TABLE #TableA (Value INT)
INSERT #TableA (Value) VALUES (1)
INSERT #TableA (Value) VALUES (2)
INSERT #TableA (Value) VALUES (3)
INSERT #TableA (Value) VALUES (5)
INSERT #TableA (Value) VALUES (6)
INSERT #TableA (Value) VALUES (8)
CREATE TABLE #TableB (Value INT)
INSERT #TableB (Value) VALUES (4)
SELECT MIN(A1.Value) + 1
FROM #TableA A1
LEFT JOIN #TableA A2 ON A2.Value = A1.Value + 1
LEFT JOIN #TableB B1 ON B1.Value = A1.Value + 1
WHERE A2.Value IS NULL
AND B1.Value IS NULL
AND A1.Value < 1000
DROP TABLE #TableA
DROP TABLE #TableB