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

ここで SQLFiddle

共有してお楽しみください。

于 2013-10-30T21:37:42.277 に答える