sql >> データベース >  >> RDS >> Oracle

結合を誤解していませんか?

    #1の説明は正しいです...クエリの問題はステップ#2にあります。

    left joinを行うとき 王国から(家族と種)まで、一致する(家族と種)がなくても、すべての王国を要求しています...ただし、これでは、(家族と種)の組み合わせが返されません。一致する王国。

    より近いクエリは次のようになります:

    select *
        from reino r
             full join (
                 familia f             
                 right join especie e
                     on f.fnombre = e.efamilia
                     and f.freino = e.ereino
             ) on r.rnombre = f.freino 
               and r.rnombre = e.ereino;
    

    left joinに注意してください full joinに置き換えられました ...

    ただし、これは種に関連付けられている家族のみを返します...王国に関連付けられているが種には関連付けられていない家族は返しません。

    あなたの質問を読み直した後、これは実際にあなたが望んでいたことです...

    編集:さらに考えてみると、クエリを次のように書き直すことができます:

    select *
    from 
        especie e
        left join familia f 
            on f.fnombre = e.efamilia
            and f.freino = e.ereino
        full join reino r
            on r.rnombre = f.freino 
            and r.rnombre = e.ereino;
    

    RIGHT JOINを削除するので、これは好ましいと思います 、通常はスタイルが悪いために眉をひそめます...そして括弧は、結果がどうなるかを決定するために人々が正しく解析するのが難しい場合があります。



    1. SQL Serverデータのスクリプトを取得する方法は?

    2. MySQLデータベースのリストとサーバーのバージョンを取得しますか?

    3. Oracleストアドプロシージャ、参照カーソルと連想配列を返します

    4. SQLServerのロックを使用してトランザクションの同時実行性を管理する