조인

2010-01-15 2 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 |  | 
+----------------+------------------------------+------+-----+---------+-------+ 

과 항목 테이블 : 판매 표는 각 항목 ID에 대해 여러 레코드를 포함

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

- 각각 1 개씩 SaleWeek. 그래서 같은 두 개의 테이블을 조인에서 판매하는 모든 항목을 선택합니다 :

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

그러나, 이것은 각 SaleWeek에 대한 여러 항목에 따라 여러에게 항목 Id 값을 반환합니다. 나는 단지 하나의 항목 ID을 반환에 별개의 선택을 할 수 - 나는 일부 항목 최신 SaleWeek에 대한 항목이 없을 수도 있기 때문에 최신 SaleWeek를 조회하고 싶지 않습니다 그래서 나는 마지막을 얻을 필요 판매. DISTINCT을 지정하거나 LEFT OUTER JOIN 또는 무엇인가를 사용해야합니까?

+1

DISTINCT를 시도 했습니까? 당신이 사용하는 DBMS에 따라 주문이 엉망이 될 수도 있습니다 ... –

답변

14

DISTINCT 당신이 찾고있는 무엇을 수행해야합니다 별개의 items.ItemName, items.ItemId 튜플을 반환

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

.

6

YOU도 판매 주에 대해 의견을 남겼습니다. 그리고 가장 최근의 주 원하는, 당신은 당신이 그래서 열을 기반으로합니다 서수 3 열 참조에 의해 순서를 변경해야 할 수도 있습니다

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 

에 의해 그룹을 사용하여 시도 할 수 있습니다 ..이 쿼리는 것이다 각각의 고유 항목과 판매 된 가장 최근의 주간을 제공합니다.

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)