2010-01-15 61 views
10

我有两个MySQL表 - 销售表:上选择不同的记录加入

+----------------+------------------------------+------+-----+---------+-------+ 
| 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 |  | 
+----------------+------------------------------+------+-----+---------+-------+ 

和项目表:

+--------------------+------------------------------+------+-----+---------+-------+ 
| Field    | Type       | Null | Key | Default | Extra | 
+--------------------+------------------------------+------+-----+---------+-------+ 
| ItemId    | bigint(20) unsigned   | NO | PRI | NULL |  | 
| ItemName   | varchar(100)     | NO |  | NULL |  | 
+--------------------+------------------------------+------+-----+---------+-------+ 

销售表包含多条记录每个项目ID - 每个SaleWe​​ek。我要选择通过连接两个表像这样出售的所有物品:

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

然而,基于对每个SaleWe​​ek多个条目,这是返回多个项目Id 。我可以做一个独特的选择,只返回一个ItemID - 我不想要查询最新的SaleWe​​ek,因为有些项目可能没有最新的条目SaleWe​​ek所以我需要得到最后一个出售。我需要指定DISTINCT或使用左外部连接什么?

+1

你试过DISTINCT吗?这可能会导致您的订购失败,具体取决于您使用的DBMS ... – 2010-01-15 00:18:55

回答

14

一个DISTINCT应该做你要找的内容:

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

,将返回唯一不同的items.ItemName, items.ItemId元组。

6

YOu也对销售周发表了评论。并希望最近一周,您可能希望使用组试图通过

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 

您可能有如果你愿意根据该列BY要更改顺序,以序数第3列引用。这个查询将为您提供每件不同的商品以及最近一周的销售情况。

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)