phpMyAdmin
 sql >> Cơ Sở Dữ Liệu >  >> Database Tools >> phpMyAdmin

CÂU HỎI SQL TRÊN BẢNG NHIỀU BẢNG

Lỗi cú pháp ở đây là bạn cần on -từ bỏ cho left join . Nhưng vấn đề khái niệm cơ bản thì khác:bạn không thể join với một truy vấn phụ phụ thuộc .

Bạn có thể sửa truy vấn của mình như sau:

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;

Điều này đã di chuyển where -điều kiện (điều đó sẽ phụ thuộc vào items.id , không được phép, vì nó nằm ngoài phạm vi) đối với on -cảm ơn. Vì vậy, item_id cũng được thêm vào select bên trong (vì nó là cần thiết bên ngoài).

Một cách khác để viết điều này sẽ là

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

Ở đây bạn có một truy vấn phụ phụ thuộc :where -clause phụ thuộc vào items.id bên ngoài . Bạn không cần nhóm group by nữa, là where -condition đã chỉ sử dụng các hàng cho mục đó. (Và dù sao thì bạn cũng chỉ có thể trả về nhiều nhất một hàng trong ngữ cảnh này.)

Cả hai truy vấn đều tương đương nhau và có thể (nếu trình tối ưu hóa tìm thấy kế hoạch thực thi đó) trong nội bộ thực sự được thực thi theo cùng một cách (mặc dù vậy, điều này không có gì bạn phải quan tâm, miễn là bạn cung cấp các chỉ mục phù hợp).

Vì vậy, trong trường hợp của bạn, bạn có thể sử dụng cả hai (và có thể kiểm tra xem cái nào nhanh hơn); nếu bạn muốn có thêm thông tin cho mục đó, bạn nên chọn left join -version mặc dù, ví dụ:sử dụng

...
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. id người dùng mysql máy chủ wamp và mật khẩu

  2. Tôi không thể truy cập XAMPP phpMyAdmin; nó nói:Lỗi MySQL đã nói:Tài liệu Không thể kết nối:cài đặt không hợp lệ

  3. MySQL LOAD DATA LOCAL INFILE chỉ nhập một hàng duy nhất

  4. Docker MYSQL '[2006] Máy chủ MySQL đã biến mất'

  5. Không thể sử dụng giá trị vô hướng dưới dạng một mảng khi lần đầu tiên mở phpmyadmin từ xamp