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

SQL FORESPØRGSEL PÅ FLERE TABELLER

Syntaksfejlen her er, at du skal bruge en on -klausul for din left join . Men det underliggende konceptuelle problem er anderledes:du kan ikke join med en afhængig underforespørgsel .

Du kan rette din forespørgsel sådan her:

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;

Dette flyttede dit indre where -condition (der vil afhænge af items.id , hvilket ikke er tilladt, da det er uden for scope) til on -klausul. Således item_id er også tilføjet i den indre select (som det er nødvendigt udenfor).

En anden måde at skrive dette på ville være

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

Her har du en afhængig underforespørgsel :den indre where -klausul afhænger af den ydre items.id . Du behøver ikke en group by længere, som where -condition bruger allerede kun rækkerne for det pågældende element. (Og du kan også højst returnere én række i denne sammenhæng alligevel.)

Begge forespørgsler er ækvivalente og kan (hvis optimeringsværktøjet finder ud af, at eksekveringsplanen) internt faktisk udføres på nøjagtig samme måde (hvilket du dog ikke skal bekymre dig meget om, så længe du giver passende indekser).

Så i dit tilfælde kan du bruge begge dele (og måske tjekke hvilken der er hurtigst); hvis du ønsker at få yderligere information om den vare, bør du foretrække left join -version dog, f.eks. brug

...
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. phpmyadmin 2002 fejl for fjernserver

  2. Hvordan kopierer man tabel mellem to modeller i Mysql workbench?

  3. Gruppér tabeller efter skema i SSMS

  4. Databasevalg mislykkedes. Ukendt databasefejl på phpmyAdmin