我有以下情况
ID SEQ
-- ---
123 2
123 4
我想要做的是生成这些值的列表,并将缺失的数字填写到最大数字,例如 6(我从另一个来源获得),其中这些数字不存在,并且 ID 在表上。
ID NEW_SEQ
-- ---
123 1
123 2
123 3
123 4
123 5
123 6
谢谢 C
这会生成一个从 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
如果您有要在 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 中。
分享和享受。