我要加入2个表格(table1
和table2
)。
第一个表包含每个记录的唯一globalcid
,第二个表包含多个相同globalcid
的出现。注意:globalcid
是table2到table1的引用字段。
表1
globalcid / itemdesc
1 / item 1
2 / item 2
3 / item 3
4 / item 4
5 / item 5
表2
globalcid / recordcid
1 / 1
1 / 2
2 / 1
3 / 1
3 / 2
3 / 3
5 / 1
我希望查询只返回[table1]中的记录,并在[table2] GROUP BY table2.globalcid中记录,但会返回每个globalcid的最后一条记录
在上面的示例中,它应该返回
globalcid / itemdesc / table2.globalcid
1 / item 1 / 2
2 / item 2 / 1
3 / item 3 / 3
5 / item 5 / 1
答案 0 :(得分:3)
SELECT
a.*,
MAX(b.recordcid) AS maxcid
FROM
table1 a
INNER JOIN
table2 b ON a.globalcid = b.globalcid
GROUP BY
a.globalcid
如果您只关心recordcid
并且不需要该表中的任何其他列,那么这应该没问题。但是,如果表中有其他列如下:
globalcid / recordcid / othercolumn
------------------------------------------
1 / 1 / bertrand
1 / 2 / centipede
2 / 1 / yarn
3 / 1 / obviate
3 / 2 / hyper
3 / 3 / fish
5 / 1 / larry
...然后MAX()
值不会与othercolumn
中对应的行数据对齐,而是必须在子选择中包含max的选择,如下所示:
SELECT
a.*,
c.recordcid,
c.othercolumn
FROM
table1 a
INNER JOIN
(
SELECT globalcid, MAX(recordcid) AS maxcid
FROM table2
GROUP BY globalcid
) b ON a.globalcid = b.globalcid
INNER JOIN
table2 c ON b.globalcid = c.globalcid AND b.maxcid = c.recordcid
导致:
globalcid / itemdesc / recordcid / othercolumn
---------------------------------------------------------
1 / item1 / 2 / centipede
2 / item2 / 1 / yarn
3 / item3 / 3 / fish
5 / item5 / 1 / larry
答案 1 :(得分:1)
您应该能够使用内部联接和聚合来实现此目的:
SELECT table1.globalcid, itemdesc, MAX(recordcid)
FROM table1 INNER JOIN table2 on table1.globalcid = table2.globalcid
GROUP BY table1.globalcid, itemdesc
内部联接排除了 table1 中 table1 中没有匹配ID的所有记录。 MAX / GROUP BY将为每个 globalcid 提取 recordid 的最大值。