3个加入mysql表的最新记录

时间:2014-07-05 12:56:23

标签: mysql sql join

我已经围绕这个问题进行了几天的讨论,这让我疯狂。我已经使用max(date)和left join找到了部分答案,但是还没有达到正确的结果,所以非常感谢任何帮助。

我有3张桌子: -

  

库存
  id
  很多其他领域......

     

SALE_PRICE
  ID
  日期
  * ticket_type_id
  * inventory_id

     

ticket_type
  ID
  ticket_name

每次更改销售价格时,sales_price表格都会更新日期和新的故障单类型。我想做的就是显示: -

  1. 在sale_price
  2. 中找到最新记录
  3. 显示与此
  4. 相关的广告资源信息
  5. 显示与此
  6. 相关的ticket_name

    我到达的查询是: -

        $result = "
        SELECT DISTINCT inv.*, tt.ticket_name, MAX(sp.date) AS spdate 
                   FROM sale_price sp 
                   LEFT 
                   JOIN ticket_type tt 
                     ON sp.ticket_type_id = tt.id
                   JOIN inventory inv 
                     ON sp.inventory_id = inv.id                  
                  GROUP 
                     BY sp.inventory_id
         ";
    

    但它显然无法正常工作。我真的很感激你能给予的任何帮助,并且(如果它不是太多)我会在哪里出错了。

    非常感谢期待!

1 个答案:

答案 0 :(得分:0)

如果您只想知道所有的最新记录,那么您可以使用以下查询:

SELECT
    s.ticket_type_id,
    s.inventory_id,
    t.ticket_name,
    i.lots of other fields  
FROM
    sale_price s
INNER JOIN
    inventory i
ON
    s.inventory_id = i.id
INNER JOIN
    ticket_type t
ON
    s.ticket_type_id = t.id;
WHERE
    s.date = (
        SELECT
            MAX(s1.date)        
        FROM
            sale_price s1
    ) 

如果您需要每个库存项目的最新记录,那么您必须使用子选择的WHERE子句中inventory_id的相等性来扩展此查询:

SELECT
    s.ticket_type_id,
    s.inventory_id,
    t.ticket_name,
    i.lots of other fields  
FROM
    sale_price s
INNER JOIN
    inventory i
ON
    s.inventory_id = i.id
INNER JOIN
    ticket_type t
ON
    s.ticket_type_id = t.id;    
WHERE
    -- gives us the newest date per inventory_id
    s.date = (
        SELECT
            MAX(s1.date)
        FROM
            sale_price s1
        WHERE
            s.inventory_id = s1.inventory_id
    )

顺便说一句,这是一个相关的子查询,它可能会变慢。