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

WHERE句またはON句のINNERJOIN条件?

    このような内部結合の場合、それらは論理的に同等です。ただし、join句の条件がwhere句の条件とは異なる意味を持つ状況に遭遇する可能性があります。

    簡単な例として、このように左結合を行うと想像してください。

    select x.id
    from x
           left join y
             on x.id = y.id
    ;
    

    ここでは、yに一致するIDがあるかどうかに関係なく、xからすべての行を取得しています。ここで、結合条件が大きくなるとしましょう。idだけでなく、id_typeにも基づいてyで一致するものを探しています。

    select x.id
    from x
           left join y
             on x.id = y.id
             and y.id_type = 'some type'
    ;
    

    繰り返しますが、これにより、yに一致する(id、id_type)があるかどうかに関係なく、xのすべての行が得られます。

    ただし、これは大きく異なります。

    select x.id
    from x
           left join y
             on x.id = y.id
    where y.id_type = 'some type'
    ;
    

    この状況では、xのすべての行を選択し、yの行と一致させようとしています。これで、yに一致する行がない場合、y.id_typeはnullになります。そのため、y.id_type ='some type'が満たされないため、一致しない行は破棄され、これが事実上内部結合になります。

    簡単に言うと、内部結合の場合、条件がどこに行くかは問題ではありませんが、外部結合の場合は可能です。



    1. PHP / MySQLで2つのmysqlクエリを1つとして実行するにはどうすればよいですか?

    2. PrintStatementを使用してVARCHAR(MAX)を印刷するにはどうすればよいですか?

    3. mysqlを使用したMeteor

    4. MySQLを使用してパーセンタイル値を計算する