2012-10-11 114 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