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

少なくともパラメータ内で、見つからない場合でも行を返すSQLクエリ

    標準のJOIN構文の使用を開始する必要があります。 (少なくとも私の意見では)読みやすくなるだけでなく、WHERE句の実際の結合条件を忘れた場合に、偶発的なデカルト結合から保護します。さらに、不格好な(+)とは対照的に、ほぼすべてのDBMS間で移植可能です。 Oracleで使用される構文(JOIN構文にはないいくつかの制限もあります)

    明示的(暗黙的ではなく)結合を使用して書き直されたクエリは次のとおりです。

    SELECT DISTINCT ope.ope_operationid,
           ser.ser_code,
           opt.opt_code,
           ost.ost_code
    FROM od_operation ope, 
       LEFT JOIN od_service_type ser ON ope.ser_id = ser.ser_id
       LEFT JOIN od_operation_type opt ON opt.opt_id = ope.opt_id
       LEFT JOIN od_status_type ost ON ost.ost_id = ope.ost_id
       LEFT JOIN od_equipment_type eqt ON ????????
    WHERE ope.opt_id = 3781
    AND   ope.ope_operationid = 'LAA351BP'
    

    編集

    od_equipment_typeに結合条件がありません これこそが、JOIN構文が優先される理由です。元のSQLの末尾のコンマが削除されると、ステートメントによって不要なデカルト結合が作成され、関連するテーブルが大きい場合にサーバーに深刻な影響を与える可能性があります。

    JOIN構文を使用すると、そのようなタイプミスを防ぐ構文エラーが常に発生します。暗黙的な結合を使用すると、FROMリストにカンマを残した場合にのみエラーが発生しますが、WHEREで結合条件を見逃した場合はエラーが発生しません。




    1. UPDATEクエリに問題があります

    2. Codeiginterでページネーションを作成するにはどうすればよいですか?

    3. カンマ区切りのリストに関するMysqlWHEREの問題

    4. 一時テーブルを作成せずに、配列unnestの出力に対して結合します