2012-10-11 54 views
2

简化我解决有些问题,但我认为下面是它的要点:选择不同的值在连接表

我有两个表(表A和表B),由LEFT JOIN加盟。

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

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

我想要我的查询的前3名的结果是3,2,4(和1和5不会被返回)。

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

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

+0

这两个表的连接参数是什么?这看起来相当简单。 –

+0

你加入了哪些专栏? –

+0

哈哈哈,jinx @碎片! –

回答

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 
+0

添加一个“限制10”,这应该符合他的要求。 –

+0

@Geoff_Montee Thx,完成 – Barmar

+0

看起来很酷,明天早上我会试试这个近似计划,并接受它是否符合要求! – thesunneversets