2010-01-15 28 views
10

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?

+1

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 ... –

Trả lời

14

Một DISTINCT nên làm những gì bạn đang tìm kiếm:

SELECT DISTINCT items.ItemName, items.ItemId FROM items 
JOIN sales ON items.ItemId = sales.ItemId 
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC; 

Điều đó sẽ trở lại chỉ rõ rệt items.ItemName, items.ItemId tuples.

6

YOu cũng đã nhận xét về tuần bán hàng. Và muốn tuần gần đây nhất, bạn có thể muốn thử sử dụng GROUP BY

SELECT 
     items.ItemName, 
     items.ItemId, 
     max(Sales.SaleWeek) MostRecentSaleWeek 
    FROM 
     items JOIN sales ON items.ItemId = sales.ItemId 
    WHERE 
     sales.StoreID = ? 
    GROUP BY 
     items.ItemID, 
     items.ItemName 
    ORDER BY 
     MostRecentSaleWeek, -- ordinal column number 3 via the MAX() call 
     items.ItemName 

Bạn có thể phải thay đổi ORDER BY thành tham chiếu cột thứ 3 nếu bạn muốn dựa trên cột đó .. cung cấp cho bạn từng mục riêng biệt VÀ tuần gần đây nhất nó đã được bán.

0
SELECT u.user_name,u.user_id, u.user_country,u.user_phone_no,ind.Industry_name,inv.id,u.user_email 
    FROM invitations inv 
    LEFT JOIN users u 
    ON inv.sender_id = u.user_id 
    LEFT JOIN employee_info ei 
    ON inv.sender_id=ei.employee_fb_id 
    LEFT JOIN industries ind 
    ON ei.industry_id=ind.id 
    WHERE inv.receiver_id='XXX' 
    AND inv.invitation_status='0' 
    AND inv.invitati 

on_status_desc='PENDING' 
GROUP BY (user_id) 
Các vấn đề liên quan