所以我有两个表,都有相同的结构:
| 表格A|表格B|
| - -|- -|
|识别码|识别码|
| 一个|一个|
| 三个|2个|
| 五个|三个|
| 10个|五个|
我需要的是比较tableA.ID和tableB.ID,找出两个表中哪些ID是空闲的,并得到这些空闲ID的间隔。
要在一个表中找到空闲ID,我使用以下代码:
SELECT
a.ID + 1 start,
min(b.ID) - 1 end,
min(b.ID) - a.ID - 1 gap
FROM
tableA a,
tableB b
WHERE a.ID < b.ID
GROUP BY a.ID
HAVING start < MIN(b.ID)
它工作正常,我得到我的差距:
表格A
| 起动机|结束|间隙|
| - -|- -|- -|
| 2个|2个|一个|
| 四个|四个|一个|
| 六个|九个|四个|
表格B
| 起动机|结束|间隙|
| - -|- -|- -|
| 四个|四个|一个|
但是,我需要比较结果,并检查 both 表中哪些ID是空闲的。
| 起动机|结束|间隙|
| - -|- -|- -|
| 四个|四个|一个|
| 六个|九个|四个|
在这里我真的迷路了,我不知道该怎么做。我试过使用join,但它对我不起作用:
WHERE a.ID < b.ID AND a.ID IN (
SELECT
c.ID+1 startID,
min(d.ID) - 1 endID,
min(d.ID) - c.ID - 1 gap
from
tableB c,
tableB d
where c.rowid < d.rowid
)
1条答案
按热度按时间ni65a41a1#
您可以 union 这两个表以获取两者的唯一值,然后使用
LEAD
函数查找空闲ID,如下所示:请参见demo。