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

SQL-QUERY OP MEERDERE TABELLEN

De syntaxisfout hier is dat je een on . nodig hebt -clause voor je left join . Maar het onderliggende conceptuele probleem is anders:je kunt niet join met een afhankelijke subquery .

U kunt uw vraag als volgt oplossen:

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;

Dit bracht je innerlijke where -condition (dat zou afhangen van items.id , wat niet is toegestaan, omdat het buiten het bereik valt) naar de on -clausule. Dus item_id is ook toegevoegd in de binnenste select (omdat het buiten nodig is).

Een andere manier om dit te schrijven zou zijn

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

Hier heb je een afhankelijke subquery :de binnenste where -clausule hangt af van de buitenste items.id . Je hebt geen group by nodig niet meer, zoals de where -condition gebruikt al alleen de rijen voor dat item. (En je kunt in deze context sowieso maar maximaal één rij retourneren.)

Beide query's zijn equivalent en kunnen (als de optimizer dat uitvoeringsplan vindt) intern op precies dezelfde manier worden uitgevoerd (waar u echter niet veel om hoeft te geven, zolang u de juiste indexen opgeeft).

Dus in jouw geval kun je beide gebruiken (en misschien controleren welke sneller is); als je aanvullende informatie voor dat item wilt krijgen, geef dan de voorkeur aan de left join -versie echter, b.v. gebruik

...
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. UNIEKE beperking creëren voor meerdere kolommen in MySQL Workbench EER-diagram

  2. Waarom krijg ik NULL-waarden bij Left Join?

  3. Zoeken en vervolgens verwijderen uit twee tabellen

  4. een database importeren in phpmyadmin #1044 - Toegang geweigerd voor gebruiker