【问题标题】:Get missing id from table从表中获取缺少的 id
【发布时间】:2016-06-10 07:31:17
【问题描述】:

我有这样的tbl_profilecategory 表结构:

Id      col1
1       50
3       30
4       40
5       50
8       80
9       90

现在我想要表格中缺少的 ID,所以这里的结果应该是这样的:

Id= 2,6,7 

【问题讨论】:

  • 那么 id:s 是 1-9 吗?只需创建另一个 id:s 1-10 的表并执行不存在查询。
  • @PresidentCamacho ......使用序列 1-10 不是一种通用方式......它应该是动态的,没有。可以是n
  • 您想要逗号分隔格式的结果吗?
  • SQL 不能创建新行,它们必须来自某个表。您可以使用具有循环的存储过程来执行此操作。
  • 你想用这个解决什么问题?没有什么要求 ID 是连续的,因此不必担心间隙。

标签: mysql sql


【解决方案1】:

你可以使用

SELECT t1.id - 1 AS missing_id
FROM mytable t1
LEFT JOIN mytable t2 ON t2.id = t1.id - 1
WHERE t2.id IS NULL

【讨论】:

  • 这将返回结果为:0 2 7
  • 这只会从每次丢失的 ID 中获取最后一个 ID。这就是为什么它不显示6
  • 是的,很好的答案,但我没有在最低 id 之前得到 id。表示如果最小删除的 id 是 5,那么我没有得到 1,2,3,4
【解决方案2】:

此答案基于here

SELECT a.id+1 AS start, MIN(b.id) - 1 AS end
FROM testtable AS a, testtable AS b
WHERE a.id < b.id
GROUP BY a.id
HAVING start < MIN(b.id)

【讨论】:

    猜你喜欢
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2020-01-04
    相关资源
    最近更新 更多