fk でリンクされた 2 つのテーブルからレコードを取得したいと考えています。この fk は null にすることができ、子テーブルにはフィルターが必要です。簡単な例で説明します。
Table Poet
IdPoet Number(5)
NameVarchar2(250)
Table Poem
IdPoem Number(5)
IdPoet Number(5) FK
Language Number(1)
Text Varchar2(2000)
FK は関係 Poet と Poem
Poet-1--------------N0---PoemですPoem.IdPoet は null にすることができます。
詩を持たない Poet と、言語 = 1 または言語 = 2 の詩を持つ詩人からすべてのレコードを取得する必要があります。言語 1 は 2 よりも制限的です。これは、詩が 2 つある場合 (1 つは言語 1 で、もう 1 つは言語 2 で書かれている)、言語 1 のレコードのみを表示する必要があることを意味します。
SELECT *
FROM POET, POEM
WHERE POET.IDPOET = POEM.IDPOET(+)
AND
(
(POEM.LANGUAGE IS NOT NULL AND POE.LANGUAGE = 1) OR
(POEM.LANGUAGE IS NOT NULL AND POE.LANGUAGE = 2) OR
(POEM.LANGUAGE IS = 1) OR
(POEM.LANGUAGE IS = 2)
)
この選択では、詩を持たない詩人、言語 1 で 1 つの詩を持つ詩人、または言語 2 で 1 つの詩を持つ詩人が表示されます。 、そして言語 1 の詩を含むレコードのみを表示したいのは、言語 2 よりも制限が厳しいためです。