ID列を持つ「スーパータイプ」を表す3つのテーブルがあります。他の 2 つのテーブルはそれぞれサブタイプであり、スーパータイプ テーブルへの外部キーである ID 列と、サブタイプ固有の列があります。
すべてのデータを返すクエリと、行がどのテーブルから来たかを示す識別子として使用できる列が必要です。
たとえば、これを変更するにはどうすればよいですか。
SELECT * from SUPER S
left outer join SUB_1 S1 on S.ID = S1.ID
left outer join SUB_2 S2 on S.ID = S2.ID
これは私にこれを返します:
ID SUB_COL_1 SUB_COL_2
==== ========= =========
0001 value x NULL
0002 value y NULL
0003 NULL value z
次のように、ハードコードされたリテラル値を持つ識別子列を追加するものに:
ID DISCRIMINATOR SUB_COL_1 SUB_COL_2
==== ============= ========= =========
0001 SUBTYPE_1 value x NULL
0002 SUBTYPE_1 value y NULL
0003 SUBTYPE_2 NULL value z
いかなる方法でもデータ モデルを変更することは許可されていません。また、事後にプログラムで NULLS をテストして、後処理を行うこともできません。テーブルをそのまま使用して、上記の正確な結果セットを生成する必要があります。答えに違いがある場合、私はOracle 11gを使用しています。