0

我有以下情况

ID    SEQ
--    ---
123   2
123   4

我想要做的是生成这些值的列表,并将缺失的数字填写到最大数字,例如 6(我从另一个来源获得),其中这些数字不存在,并且 ID 在表上。

ID    NEW_SEQ
--    ---
123     1
123     2
123     3
123     4
123     5
123     6

谢谢 C

4

2 回答 2

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
于 2013-10-30T16:20:14.940 回答
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 中。

SQLFiddle 在这里

分享和享受。

于 2013-10-30T21:37:42.277 回答