phpMyAdmin
 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 - условието вече използва само редовете за този елемент. (И така или иначе можете да върнете най-много един ред в този контекст.)

И двете заявки са еквивалентни и могат (ако оптимизаторът открие този план за изпълнение) вътрешно да се изпълняват по абсолютно същия начин (което обаче не е нещо, за което трябва да се интересувате особено, стига да предоставите подходящи индекси).

Така че във вашия случай можете да използвате и двете (и може би да проверите кой е по-бърз); ако искате да получите допълнителна информация за този елемент, трябва да предпочетете 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. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Изявлението REPLACE на MySQL е неправилно? Намерено е ново изявление, но без разделител

  2. phpmyadmin синхронизира

  3. Изпълняване на SQL заявки в база данни с phpMyAdmin

  4. Как да активирам изгледа Designer на phpMyAdmin?

  5. Как да вляза в phpMyAdmin с WAMP, какво е потребителското име и паролата?