如何在我的桌子上找到错过的ID?

时间:2017-04-15 19:40:02

标签: database postgresql

如何在我的桌子上找到错过的ID?例如,现在ids是

1
3
8

我的目标是找到错过的值

2
4
5
6
7

3 个答案:

答案 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,因为

  1. 它减少了集合,NOT EXISTS是明确的。左连接可以具有增长集合的效果。
  2. 它的条件被包含,inner.id = outer.id不可能偏离该条款。
  3. 查询中的其他任何位置都无法使用内部表。
  4. 这是一个例子,

    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
    );