sql >> Databasteknik >  >> Database Tools >> phpMyAdmin

SQL-FRÅGA PÅ FLERA TABELLER

Syntaxfelet här är att du behöver en on -klausul för din left join . Men det underliggande konceptuella problemet är annorlunda:du kan inte join med en beroende underfråga .

Du kan fixa din fråga så här:

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;

Detta flyttade din inre where -condition (som skulle bero på items.id , vilket inte är tillåtet eftersom det är utanför räckvidden) till on -klausul. Alltså item_id läggs också till i den inre select (eftersom det behövs utanför).

Ett annat sätt att skriva detta skulle vara

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

Här har du en beroende underfråga :den inre where -satsen beror på den yttre items.id . Du behöver inte group by längre, som where -condition använder redan bara raderna för det objektet. (Och du kan också bara returnera högst en rad i detta sammanhang ändå.)

Båda frågorna är likvärdiga och kan (om optimeraren hittar den exekveringsplanen) internt faktiskt köras på exakt samma sätt (vilket du dock inte behöver bry dig om så länge du tillhandahåller lämpliga index).

Så i ditt fall kan du använda båda (och kanske kolla vilken som är snabbast); om du vill få ytterligare information för det objektet, bör du föredra left join -version dock, t.ex. använd

...
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. Hur man hash automatiska ökningar i mysql

  2. Mysql - Det gick inte att ansluta okänt databasnamn-fel

  3. Hur man exporterar i kolumnen phpmyadmin not include id (kolumnen AUTO_INCREMENT)

  4. phpmyadmin visar php-skript