我需要两个表来从TABLE_A
和TABLE_B
中选择数据;他们有一对多的关系。
在我的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 :(得分: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;
答案 1 :(得分:0)
我过去采用的一种方法是创建包含最新信息的table_b视图,然后将table_a连接到该视图。一个很好的例子。我们有一个事故跟踪系统。一个表包含与事件相关的所有常量数据table_a。第二个表table_b充当审计表并跟踪事件的更新。我创建了每个特定事件的最新更新视图,我将此视图用于各种报告,但我可以将此表连接到我的table_a,以产生可生成事件最新信息的结果。