我有以下情况
ID SEQ
-- ---
123 2
123 4
我希望能够做的是生成这些值的列表,并将缺少的数字填入最大数字,例如6(我从其他来源获得),其中这些数字不存在且ID为桌子。
ID NEW_SEQ
-- ---
123 1
123 2
123 3
123 4
123 5
123 6
由于 ç
答案 0 :(得分:2)
这将生成一个从1到6的数字序列,与表的所有id交叉连接,以将每个序列号与每个id相关联,然后删除已存在的组合。
SELECT t.id, s.seq
FROM (SELECT DISTINCT id FROM myTable) t
,(SELECT rownum AS seq
FROM dual
CONNECT BY LEVEL <= 6) s
MINUS
SELECT id, seq
FROM myTable
ORDER BY 1, 2
答案 1 :(得分:1)
如果您有一个要在OTHER_TABLE中使用的数字列表,那么我建议您使用外部联接,如:
SELECT o.ID, o.NEW_SEQ
FROM OTHER_TABLE o
LEFT OUTER JOIN (SELECT ID, SEQ FROM MY_TABLE) t
ON (o.ID = t.ID AND o.NEW_SEQ = t.SEQ)
WHERE t.SEQ IS NULL
ORDER BY o.ID, o.NEW_SEQ
外连接将包括第一个表中的所有行(在这种情况下为OTHER_TABLE)与第二个表中存在的行(此处为MY_TABLE)连接。如果OTHER_TABLE中有一行在MY_TABLE中没有匹配的行,则MY_TABLE中的字段将为NULL - 因此,通过检查t.SEQ是否为NULL,您可以找到OTHER_TABLE中存在的行,但是不在MY_TABLE。
分享并享受。