phpMyAdmin
 sql >> Baza danych >  >> Database Tools >> phpMyAdmin

ZAPYTANIE SQL NA WIELU TABELACH

Błąd składni polega na tym, że potrzebujesz on -klauzula dla twojego left join . Ale podstawowy problem koncepcyjny jest inny:nie możesz join z zależnym podzapytaniem .

Możesz poprawić swoje zapytanie w ten sposób:

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;

To przeniosło twoje wewnętrzne where -stan (który będzie zależał od items.id , co jest niedozwolone, ponieważ jest poza zakresem) do on -klauzula. Zatem item_id jest również dodawany w wewnętrznym select (jak to jest potrzebne na zewnątrz).

Innym sposobem napisania tego byłoby

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

Tutaj masz zależne podzapytanie :wewnętrzny where -klauzula zależy od zewnętrznego items.id . Nie potrzebujesz group by już, jako where -warunek używa już tylko wierszy dla tego elementu. (W tym kontekście możesz również zwrócić co najwyżej jeden wiersz).

Oba zapytania są równoważne i mogą (jeśli optymalizator znajdzie ten plan wykonania) wewnętrznie faktycznie wykonane w dokładnie ten sam sposób (co nie jest niczym, o co musisz się specjalnie przejmować, o ile zapewnisz odpowiednie indeksy).

Więc w twoim przypadku możesz użyć obu (i może sprawdzić, który z nich jest szybszy); jeśli chcesz uzyskać dodatkowe informacje o tym elemencie, powinieneś preferować left join - jednak wersja, np. użyj

...
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. Migracja bazy danych Wordpress do serwera SQL błąd

  2. Usuwanie duplikatów adresu e-mail na podstawie najniższego identyfikatora w mysql

  3. MD5(RAND()) w MySQL zwraca tylko cyfry

  4. Automatyczna aktualizacja zapasów w bazie danych Mysql

  5. Czy istnieje narzędzie takie jak phpMyAdmin, które można skonfigurować tak, aby uzyskać dostęp tylko do jednej bazy danych?