sql >> Databáze >  >> Database Tools >> phpMyAdmin

SQL DOTAZ NA VÍCE TABULEK

Chyba syntaxe je, že potřebujete on -klauzule pro vaše left join . Ale základní koncepční problém je jiný:nemůžete se join s závislým poddotazem .

Svůj dotaz můžete opravit takto:

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;

Toto přesunulo vaše vnitřní where -condition (to by záviselo na items.id , což není povoleno, protože je mimo rozsah) do on -doložka. Tedy item_id je také přidán do vnitřního select (jak je potřeba venku).

Jiný způsob, jak to napsat, by byl

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

Zde máte závislý poddotaz :vnitřní where -klauzule závisí na vnějším items.id . Nepotřebujete group by již jako where -condition již používá pouze řádky pro danou položku. (A v tomto kontextu také můžete vrátit maximálně jeden řádek.)

Oba dotazy jsou ekvivalentní a mohou být (pokud optimalizátor nalezne tento plán provádění) interně skutečně provedeny přesně stejným způsobem (což není nic, o co byste se museli moc starat, pokud poskytnete vhodné indexy).

Takže ve vašem případě můžete použít oba (a možná zkontrolovat, který z nich je rychlejší); pokud chcete získat další informace o této položce, měli byste preferovat left join -verze však např. použití

...
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 Server Management Studio – Dokumenty s kartami

  2. Závažná chyba:Nedostatek paměti (přiděleno 1134559232) (pokuseno přidělit 32768 bajtů) v X:\wamp\www\xxx

  3. mysql:nelze vytvořit uživatele po odstranění uživatele pomocí phpmyadmin

  4. Automatické obnovení SQL Server 2008 Management Studio intellisense (ne ručně prostřednictvím nabídky nebo klávesové zkratky)