2

このように完全な外部結合を単純に記述できる場合、左結合(またはさらに言えば内部結合)の使用は何ですか?

playorm=# select * from trade as a full outer join Account as b on b.id=a.accoun
tid where a.id = a.id;

これにより、LEFT内部結合が返すのと同じ結果がすべて返されます。

または、内部結合が必要な場合は、これを行うことができます

playorm=# select * from trade as a full outer join Account as b on b.id=a.accoun
tid where a.id = a.id AND b.id = b.id;

これにより、INNERJOINが返すのと同じ結果がすべて返されます。

これはちょっと面白いと思っただけだと思います。私は当初、左外部結合がnull +条件が一致したものを返すと誤解していましたが、条件が一致する必要があることがわかりました。これは、この内部結合のように、一致するレコードが削除されるためです(おそらく、式の一致の前に結合が行われるため、 .accountidがnullの場合、where句の役に立たない部分です。

select * from trade as a inner join Account as b on b.id=a.accountid
here (b.isActive=false OR a.accountid is null) and a.number < 15;

後で、ディーン

4

1 に答える 1

5

ご質問の意図がよくわかりません。「追加のxxx is not null条件を使用した full-outer-join の構文を使用するのは簡単なのに、なぜ SQL は left-outer-join の構文をサポートするのですか?」つまり、left-outer-join は不要なシンタックス シュガーのように見えますか?

回答: シンタックス シュガーを使用して、コードを読む他の人に意味を明確にします。たとえば、学校に生徒のテーブルとコースのテーブルがあるとします。学生のリストと、合格していない学生を含む、合格したコースを表示したい場合は、左外部結合を使用すると、その意図が明確になります。あなたのコードに完全な外部結合が見られる場合は、誰も合格していないコースにも興味があると思うかもしれません。これらの一致しないコースを除外する条件の中からその句を見つけるには、コードを少し掘り下げる必要があります。

私のようなプログラマーは時間に追われていることが多いため、コードを理想的なほど深く掘り下げることはありません。そのため、意図を理解するのに役立つヒントを教えてください。シナクティック シュガーを使用して、同僚の職業生活を甘くします。

ところで、「内部結合は一致するレコードを排除する」と述べています。「内部結合は、他のテーブルで一致しないレコードを除外する」ということですか? 実際には、内部結合は一致するすべてのレコードを返すものと考え、左/右/完全外部結合は最初/2 番目/両方のテーブルからの一致しないレコードで内部結合を補完するものと考えたほうがよいでしょう。

于 2012-09-16T00:04:19.017 に答える