

はじめまして。SQL習いたての者です。  
海外の練習サイトを使って勉強しだしたんですが、以下のリンク先の問題を解いていたところ疑問がでてきました。

<https://pgexercises.com/questions/joins/self2.html>

[![質問とテーブルのイメージ画像です](https://i.stack.imgur.com/5qC0X.png)](https://i.stack.imgur.com/5qC0X.png)

[code]

    select mems.firstname as memfname, mems.surname as memsname, recs.firstname as recfname, recs.surname as recsname
    from 
        cd.members mems
        left outer join cd.members recs
            on recs.memid = mems.recommendedby
    order by memsname, memfname; 
    
[/code]

上記が問題の解答コードなんですが、onの中身を

[code]

    left outer join cd.members recs
                on mems.memid = recs.recommendedby
    
[/code]

のように入れ替えたら答えが変わってしまいました。  
原因を明確に説明できず、モヤモヤしているため、よろしければご教示ください。


CC BY-SA 4.0
2018-10-25T04:25:51.603
49639
2018-10-27T03:44:52.950
2018-10-25T05:05:08.723
3060
30679
question
sql postgresql
自己結合時のon句内プライマリーキーの書き方について


joinの結合条件になっている項目も出力してみると理解しやすいと思います。

回答コードの場合

[code]

    select mems.firstname as memfname, mems.surname as memsname, mems.recommendedby as menby, recs.memid as recid, recs.firstname as recfname, recs.surname as recsname
    from cd.members mems
    left outer join cd.members recs on recs.memid = mems.recommendedby
    order by memsname, memfname;
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/7v8gx.png)](https://i.stack.imgur.com/7v8gx.png)

onの中身を入れ替えた場合

[code]

    select mems.memid, mems.firstname as memfname, mems.surname as memsname, recs.firstname as recfname, recs.surname as recsname, recs.recommendedby as recby
    from cd.members mems
    left outer join cd.members recs on mems.memid = recs.recommendedby
    order by memsname, memfname; 
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/h6bWP.png)](https://i.stack.imgur.com/h6bWP.png)

言葉にすると、回答コードの場合はメンバーが推薦された（recommendedby）人、要するにメンバーを推薦した人が表示され、onの中身を入れ替えるとメンバーが推薦した人が表示されます。


CC BY-SA 4.0
2018-10-27T03:44:52.950
49700
2018-10-27T03:44:52.950
15171
49639
answer