Tôi có hai bảng mysql - một bảng bán hàng:Chọn hồ sơ riêng biệt trên tham gia
+----------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------------------+------+-----+---------+-------+
| StoreId | bigint(20) unsigned | NO | PRI | NULL | |
| ItemId | bigint(20) unsigned | NO | | NULL | |
| SaleWeek | int(10) unsigned | NO | PRI | NULL | |
+----------------+------------------------------+------+-----+---------+-------+
và một bảng mục:
+--------------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------------------------+------+-----+---------+-------+
| ItemId | bigint(20) unsigned | NO | PRI | NULL | |
| ItemName | varchar(100) | NO | | NULL | |
+--------------------+------------------------------+------+-----+---------+-------+
Bảng bán hàng chứa nhiều bản ghi cho mỗi ItemID - một cho mỗi SaleWeek. Tôi muốn chọn tất cả các mục bán bằng cách tham gia hai bảng như sau:
SELECT items.ItemName, items.ItemId FROM items
JOIN sales ON items.ItemId = sales.ItemId
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC;
Tuy nhiên, điều này đang trở lại nhiều ItemID giá trị dựa trên nhiều mục cho mỗi SaleWeek. Tôi có thể thực hiện một lựa chọn khác để chỉ trả lại một ItemID - Tôi không muốn phải truy vấn SaleWeek mới nhất vì một số mặt hàng có thể không có mục nhập mới nhất SaleWeek vì vậy tôi cần phải có buôn bán. Tôi có cần phải chỉ định DISTINCT hoặc sử dụng LEFT OUTER JOIN hoặc gì đó không?
Bạn đã thử DISTINCT chưa? Nó có thể làm hỏng thứ tự của bạn, tùy thuộc vào DBMS bạn sử dụng ... –