如何在我的桌子上找到错过的ID?例如,现在ids是
1
3
8
我的目标是找到错过的值
2
4
5
6
7
答案 0 :(得分:1)
请参阅generate_series(start, stop)功能。只需LEFT JOIN
与你的id
系列文章即可获得遗失系列。
或使用EXCEPT
运算符
SELECT
generate_series(1, MAX(id)) AS id
FROM
the_table
EXCEPT
SELECT
id
FROM
the_table
答案 1 :(得分:1)
SELECT s.v from generate_series(1, (select max(id) from your_table)) s(v)
left join your_table
on s.v = your_table.id
WHERE your_table.id IS NULL
答案 2 :(得分:0)
仅出于样式原因,这也会导致反连接(like @Oto Shavadze's answer)。你可以选择你更喜欢的款式。在适用的情况下,应优先考虑NOT EXISTS
,因为
NOT EXISTS
是明确的。左连接可以具有增长集合的效果。inner.id = outer.id
不可能偏离该条款。这是一个例子,
SELECT s.v
FROM generate_series(1, (SELECT max(id) FROM yourTable))
AS s(v)
WHERE NOT EXISTS (
SELECT 1
FROM yourTable
WHERE s.v = id
);