在连接表中选择不同的值

时间:2012-10-11 19:22:48

标签: mysql

简化我正在解决的问题,但我认为以下是它的要点:

我有两个表(TableA和TableB),由LEFT JOIN连接。

我需要以反向时间顺序从TableA获得10条记录;但是这十个结果中的每一个都在TableB.foo中具有唯一值。

A.id是1,A.date是两天前,B.foo是'猫' A.id是2,A.date是昨天,B.foo是'猫' A.id是3,A.date是今天,B.foo是'狗' A.id是4,A.date是三天前,B.foo是'猪' A.id是5,A.date是四天前,B.foo是'狗'。

我希望我的查询的前3个结果为3,2,4(并且根本不会返回1和5)。

这可以在单个MySQL查询中实现吗?

如果失败了,那么在多个步骤中获得所需结果集的最有效策略是什么?

1 个答案:

答案 0 :(得分:2)

SELECT T1.id, T1.date
FROM (SELECT A.id id, B.foo foo, A.date date
      FROM A JOIN B
      ON A.b_id = B.id) T1
JOIN (
    SELECT B.foo foo, MAX(A.date) maxdate
    FROM A JOIN B
    ON A.b_id = B.id
    GROUP BY B.foo) T2
ON T1.foo = T2.foo and T1.date = T2.maxdate
ORDER BY T1.date DESC
LIMIT 10