2009-09-15 133 views
0

我有兩個表我需要從TABLE_ATABLE_B中選擇數據;他們有一對多的關係。Mysql select分組

在我的選擇聲明中,我經常會從TABLE_A得到多個獨特的結果,這很好。但我也會在TABLE_B中獲得多個匹配 - 我需要獲取最近匹配的TABLE_B記錄。我有一個可用的自動遞增的id標籤。

這裏有一個更詳細的例子:

TABLE_A

TABLE_A_id data 
----------------------------- 
1   something  
2   somethignelse  
3   yetagainsomething 

表-B

TABLE_B_id TABLE_A_id data 
------------------------------------ 
1   1   filler_data1 
2   1   filler_data1 
3   1   filler_data3 
4   2   filler_data4 
5   2   filler_data5 
6   3   filler_data1 

我需要選擇數據,使得我返回數組是這樣的一個搜索上包含「filler_data1」的行:

`TABLE_A_id` = 1, something, `TABLE_B_id` = 2, filler_data1 

`TABLE_A_id` = 3, yetagainsomething, `TABLE_B_id` = 6, filler_data1 

因此,在上述情況下,我得到最近的TABLE_B數據,即TABLE_B_id = 2並匹配「filler_data1」的搜索。

+0

所以你的問題是? – mauris 2009-09-16 00:12:40

+0

我的問題是MySQL會爲我做這件事。我需要一個聲明,將產生多個TABLE_A行,只有最近TABLE_B匹配 – 2009-09-16 00:22:28

+0

你可以編輯你的帖子上面,並顯示一個例子? – 2009-09-16 01:54:38

回答

1

這是StackOverflow上每週出現好幾次的「每組查詢的最大N個」問題。

SELECT A.*, B1.* 
FROM TABLE_A A 
JOIN TABLE_B B1 ON (A.A_ID = B1.A_ID) 
LEFT OUTER JOIN TABLE_B B2 ON (A.A_ID = B2.A_ID AND B1.B_ID < B2.B_ID) 
WHERE B2.B_ID IS NULL; 
+0

這只是從TABLE_A產生一個單一的結果,我需要能夠獲得倍數,儘管在單個查詢中它確實得到了正確的TABLE_B記錄 – 2009-09-16 00:37:36

0

我過去採取的一種方法是創建一個包含最新信息的table_b視圖,然後將table_a連接到該視圖。例如。我們有一個事件跟蹤系統。一張表包含與事件相關的所有常量數據table_a。第二個表table_b充當審計表並跟蹤事件的更新。我爲每個特定事件創建了最新更新的視圖,我使用此視圖獲取各種報告,但是我可以將此表加入到我的table_a中,以產生能夠生成事件最新信息的結果。