次のシナリオがあります
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) のすべての行が含まれ、2 番目のテーブル (ここでは MY_TABLE) に存在する行と結合されます。MY_TABLE に一致する行がない OTHER_TABLE に行がある場合、MY_TABLE のフィールドは NULL になります。したがって、t.SEQ が NULL であることを確認することで、OTHER_TABLE に存在するが、ある行を見つけることができます。 MY_TABLE にはありません。
共有してお楽しみください。