2017-02-28 53 views
3

以下代码显示了项目的最大日期,并且所有工作都很好。链接到另一个表以获取内部联接名称

SELECT 
    pricing_id, pricing.field, pricing.region, price, max_date 
FROM 
    pricing 
     INNER JOIN 
    (SELECT 
     field, MAX(end_date) AS 'max_date' 
    FROM 
     pricing, regions 
    GROUP BY field) AS tmptable ON tmptable.max_date = pricing.end_date 
     AND tmptable.field = pricing.field 
ORDER BY region, pricing.field 

我试图从regions.region_name拉取区域名称来替换只显示ID的pricing.region列。我已经尝试了通常的where子句来连接表并显示描述性名称,但它打破了它。

谁能帮助?

感谢,

约翰

+0

您在子选项中的子句同时具有定价和区域。难道这不就是地区吗? –

+0

你能否介绍一下子查询的尝试?哪一个表是'end_date',以及为什么两个表都需要找到'MAX(end_date)'? –

回答

3

你必须从区域表中选择REGION_NAME

财产以后像

SELECT 
pricing_id, pricing.field, tmptable.region_name , price, max_date 
FROM 
pricing 
    INNER JOIN 
(SELECT 
    region_name , field, MAX(end_date) AS 'max_date' 
FROM 
    pricing, regions 
GROUP BY field) AS tmptable ON tmptable.max_date = pricing.end_date 
    AND tmptable.field = pricing.field 
ORDER BY region, pricing.field 

应该工作。

1

假设你的表是在设置这应该工作类似。我假设你不想尝试在子选择中找到它,这似乎比所需的更多的工作。相反,我将它添加为LEFT JOIN,并将查询的其余部分改为匹配。

SELECT 
    pricing_id, pricing.field, r.region_name, price, max_date 
FROM 
    pricing 
     INNER JOIN 
    (SELECT 
     field, MAX(end_date) AS 'max_date' 
    FROM 
     pricing 
    GROUP BY field) AS tmptable ON tmptable.max_date = pricing.end_date 
     AND tmptable.field = pricing.field 
LEFT JOIN regions r ON r.id = pricing.region 
ORDER BY r.region_name, pricing.field