これは実際の例ではなく、しばらくの間私を悩ませてきたものであり、この動作を説明できる人に非常に感謝しています.
私はこれらの2つのテーブルを持っています
MYTABLE1
ID TYPE NAME
1 1 typea
2 2 typea
3 3 typea
4 4 typeb
5 5 typeb
6 6 typeb
7 7 typec
8 8 typec
9 9 typec
10 10 typed
MYTYPE
ID NAME DESCRIPTION
1 typea typea with desc
2 typea
3 typea TYPE
4 typeb typeb with desc
5 typeb
6 typeb TYPE
7 typec typec with desc
8 typec
9 typec TYPE
両方のテーブル (mytable1 a、mytype b) から行を返す sql が必要です。
a) MYTABLE1.type = MYTYPE.ID および MYTYPE.description='TYPE'
b) MYTABLE1.type が MYTYPE.id にない
a.id a.type a.name b.id b.name b.description
3 3 typea 3 typea TYPE
6 6 typeb 6 typeb TYPE
9 9 typec 9 typec TYPE
10 10 typed null null null
私はこのステートメントを試しましたが、成功しませんでした。ユニオンやネストされた選択ではなく、外部結合を使用するソリューションが必要です。
例として、私はOracleの外部結合構文を使用していますが、標準構文を使用して条件をa) ON句内またはb) where句内に置くことで同じ結果が得られると思います
私が望むのは、それらの「奇妙な」動作を理解し、提供された例で機能するものを見つけようとすることです。私にとって最も奇妙なのはSQL2です。質問を短くするために、クエリの結果を書いていませんが、必要に応じて提供できます。
SQL1
select *
from
mytable1 a,
mytype b
where
a.type=b.id(+)
and b.description ='TYPE'
order by a.id
SQL2
select *
from
mytable1 a,
mytype b
where
a.type=b.id(+)
and b.description(+) ='TYPE'
order by a.id
SQL3
select *
from
mytable1 a,
mytype b
where
a.type=b.id(+)
and (b.description ='TYPE' or b.description is null)
order by a.id
前もって感謝します、