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

2番目のテーブルに対応するエントリがない場合でも、2つのdbテーブルからクエリ結果を取得する

    O.P.のコメント:

    問題は、where 句は結果セットをフィルタリングするため、req.statusのテスト 2または5の場合、req.statusの場所はすべてスローされます。 テーブルapplicationsに一致する行がないため、nullになります 。

    selectの操作の一般的、理論的(些細な実装だけが実際にこのようなことを行うため)順序 ステートメントは次のとおりです:

    • fromにリストされている各テーブルの完全なデカルト積を生成します 条項。
    • 指定されたjoinを適用してフィルタリングします 指定されたテストに合格しない基準と削除された行。
    • whereで指定されたフィルター基準を適用します 句、指定されたテストに合格しない行を削除します。
    • group byで指定された式に設定された結果を並べ替えます 結果セットをグループにまとめて分割します。
    • このような各グループを1つの行にまとめて、指定されたすべての集計関数の値を計算します。
    • selectにリストされていないすべての列を結果セットから削除します ステートメント列リスト。
    • この最終結果セットをorder byで指定された列/式で並べ替えます 条項。

    次の2つのいずれかを実行できます:

    • クエリを変更してnullをテストします:

      where...( req.status is null OR req.status in (2,5) )...
      
    • テストをreq.statusに移動します 参加基準へ:

      left join requests req on req.app_id =  apps.id
                            and req.uid    =  {$user_id}
                            and req.status in (2,5)
      


    1. SQLクエリ、各グループで最新の5つを選択

    2. LIMIT 1を使用すると、主キーのクエリが高速化されますか?

    3. SQL多対多選択

    4. 保護されたプロパティから値を取得する