我想以一对多的关系连接两个表,但是在第二个表中只选择一行,在第二个表的第X列中选择最大值。
这是sqlfiddle。
这是我的……
您的查询都可以完成任务。没有比另一个更好。但是一个可能比另一个更快,你可以找到它 EXPLAIN PLAN 。理想情况下,Oracle会为两者提出相同的执行计划,但优化器检测两个查询执行相同操作是一项艰巨的任务。
EXPLAIN PLAN
从Oracle 12c开始,我会使用 CROSS APPLY :
CROSS APPLY
select u.*, a.id, a.address from my_user u cross apply ( select * from my_address ma where ma.username = u.username order by ma.id desc fetch first row only ) a;
在早期版本中(从Oracle 9i开始):
select u.*, a.id, a.address from my_user u join ( select ma.*, row_number() over (partition by username order by id desc) as rn from my_address ma ) a on a.username = u.username and a.rn = 1;
在更早的版本中:
select u.*, a.id, a.address from my_user u join ( select * from my_address ma where id in (select max(id) from my_address group by username) ) a on a.username = u.username;
演示: https://dbfiddle.uk/?rdbms=oracle_18&fiddle=c0d3ab6617956cb69f979a413026f6db