具有多个连接的mysql SELECT查询,需要最新的表数据

时间:2015-04-17 01:35:23

标签: mysql select join

我有一个mysql查询,它通过product_id链接3个表。

SELECT 
P.product_id, P.title, P.unit,
Pp.date, Pp.price, Pp.wasprice,
C.quantity, C.date_added
FROM productdetail P

INNER JOIN
productprices Pp
ON P.product_id = Pp.product_id

RIGHT JOIN
cart C
ON Pp.product_id = C.product_id
WHERE C.session = :session AND C.quantity > 0

如果表productprices 中有一个或多个条目,则此查询将提供所有日期。我只需要每个product_id的最新条目。因此,在下面的小提琴中,它应该导致3个不同的项目都具有最新日期。

我创建了一个 sql fiddle 来向您展示我的意思,并让您更轻松地进行编辑。我尝试过子查询,但都无济于事。

干杯

1 个答案:

答案 0 :(得分:1)

您可以为子查询中的每个date获取最新的product_id,结果就是加入表productdetail

例如

SELECT 
P.product_id, P.title,
Pp.date, Pp.price,
C.quantity, C.date_added
FROM
productdetail P
INNER JOIN
productprices Pp
ON P.product_id = Pp.product_id     
INNER JOIN

(
  SELECT product_id, MAX(date) AS max_date      -- << this part will get the latest row
  FROM productprices                            -- << in every product_id
  GROUP BY product_id
) maxx 
ON Pp.product_id = maxx.product_id 

AND Pp.date = maxx.max_date
RIGHT JOIN
cart C
ON Pp.product_id = C.product_id
WHERE C.session = 12345 AND C.quantity > 0