我想从与 fk 链接的两个表中获取记录。此 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 可以为空。
我需要从 Poet 那里得到所有没有诗歌的记录,以及有语言 = 1 或语言 = 2 的诗歌的诗人。语言 1 比 2 更具限制性。这意味着如果有一个诗人有 2 首诗(一个写在语言 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 的诗歌或有 1 首语言 2 的诗歌。问题是当诗歌有 2 首诗歌,1 首语言 1 和其他语言 2 时,则显示 2 条记录,并且我只想在语言 1 上显示带有诗歌的记录,因为它比 2 更具限制性。