sql >> データベース >  >> Database Tools >> phpMyAdmin

複数のテーブルでのSQLクエリ

    ここでの構文エラーは、onが必要なことです。 -left joinの句 。しかし、根本的な概念上の問題は異なります。joinすることはできません。 依存サブクエリ

    次のようにクエリを修正できます:

    select items.* 
    from items 
    LEFT OUTER JOIN (
      select item_id, sum(purchase_details.quantity) as total
      from purchase_details 
      GROUP BY purchase_details.item_id
    ) ABC on ABC.item_id = items.id;
    

    これにより、内部のwhereが移動しました -条件(items.idに依存します 、これは範囲外であるため許可されていません)on -句。したがって、item_id 内側のselectにも追加されます (外部で必要になるため)

    これを書く別の方法は

    です
    select items.*, 
       (select sum(purchase_details.quantity) 
        from purchase_details 
        where purchase_details.item_id=items.id) as total
    from items;
    

    ここに依存サブクエリがあります :内側のwhere -句は外部のitems.idに依存します 。 group byは必要ありません もう、whereとして -conditionは、すでにそのアイテムの行のみを使用しています。 (とにかく、このコンテキストでは最大で1行しか返すことができません。)

    両方のクエリは同等であり、(オプティマイザがその実行プランを検出した場合)内部的にまったく同じ方法で実行できます(適切なインデックスを提供する限り、これはあまり気にする必要はありません)。

    したがって、あなたの場合は両方を使用できます(そして、どちらが速いかを確認することもできます)。そのアイテムの追加情報を取得したい場合は、left joinを選択する必要があります -バージョンですが、例:使用

    ...
    LEFT OUTER JOIN (
      select item_id, 
        sum(purchase_details.quantity) as total,
        count(purchase_details.item_id) as cnt,
        max(purchase_details.quantity) as max_quantity_per_order,
        max(purchase_details.date) as latest_order,
        ...
      from purchase_details 
      GROUP BY purchase_details.item_id
    ) ABC on ABC.item_id = items.id;
    



    1. 複数のテーブルでのSQLクエリ

    2. phpmyadminのユーザー名とパスワードを設定する方法

    3. PHPmyAdminのデフォルトデータベース

    4. rowguid列に値を入力する方法は?