Oracle には次の最小限のスキーマがあります: http://sqlfiddle.com/#!4/c1ed0/14
私が実行したクエリでは、結果が多すぎて、次のクエリが生成されます。
select cat.*, status.*, source.*
from cats cat, status status, source source
Left OUTER JOIN source source2
on source2.sourceid = 1
Right OUTER JOIN status status2
on status2.isStray =0
order by cat.name
不正確な結果になります。私が期待しているのは、次のようなテーブルですが、正しい SQL を思い付くことができないようです。
NAME AGE LENGTH STATUSID CATSOURCE ISSTRAY SOURCEID CATID
Adam 1 25 null null null 1 2
Bill 5 1 null null null null null
Charles 7 5 null null null null null
Steve 12 15 1 1 1 1 1
簡単な英語で私が探しているのは、null 値を保持しながら、すべての既知の猫 + 関連する猫のソース + 猫のステータスを返すことです。私が持っている唯一の情報は、私が興味を持っている情報源です。また、ステータスが STRAY または UNKNOWN (null) の猫のみが必要です。
アップデート
明確にするために、Cats のマッピングは次のようになります。
Cat の ID は、列 catId の下の Source テーブルに格納されます。
Status テーブルには、catSource というラベルの付いた列として Source の PK への参照があります。
実際には、現在の猫のステータスを取得するためのクエリは次のようになります。
select cat.* from cats cat, status status, source source
where cat.id = source.catId
and source.sourceId = status.catSource
最終クエリ
select *
from source
inner join cats on source.catid = cats.id
and source.sourceid = 1
left join status on source.sourceid = status.catsource