次のことを行う単一の選択ステートメントを作成するにはどうすればよいですか。
テーブルに整数列があり、その列で値が 1000 未満で、値が TableB Column1 に存在しない最小の使用可能な (未使用の) 値を見つけたい
ありがとう
次のことを行う単一の選択ステートメントを作成するにはどうすればよいですか。
テーブルに整数列があり、その列で値が 1000 未満で、値が TableB Column1 に存在しない最小の使用可能な (未使用の) 値を見つけたい
ありがとう
LukeH's answer に似ていますが、それはあなたが求めたことを行います:
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
そして、2 つの値の最小値を選択します。
値 1 が使用可能かどうかを確認する必要がありますが、A と B の間にギャップがある場合は、A+1 と B-1 を見つける必要があり、最小のものを選択できます。明らかに A+1 が最小なので、2 番目の部分だけを使用できます...
これは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