sql、外连接
我有两个表,通过外部联接链接。主表和辅助表之间的关系是 1 到 [0..n]。辅助表包括一个时间戳列,指示添加记录的时间。我只想检索主表中每行的辅助表的最新记录。由于其他表也是 SELECT 的一部分,因此我必须在主表上使用 group by。但无法使用“having”子句,因为该辅助表不是该组的一部分。
如何在不进行多次查询的情况下做到这一点?
I have two tables, linked with an outer join. The relationship between the primary and secondary table is a 1 to [0..n]. The secondary table includes a timestamp column indicating when the record was added. I only want to retrieve the most recent record of the secondary table for each row in the primary. I have to use a group by on the primary table due to other tables also part of the SELECT. There's no way to use a 'having' clause though since this secondary table is not part of the group.
How can I do this without doing multiple queries?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
为了性能,尽量减少接触表的次数
选项 1,OUTER APPLY
选项 2,聚合
注意:每个表都被提及一次,没有相关子查询
For performance, try to touch the table least times
Option 1, OUTER APPLY
Option 2, Aggregate
Note: each table is mentioned once, no correlated subqueries
类似于:
如果要显示 table1 中 ID 的行而 table2 中没有任何匹配项,请使用 LEFT JOIN 而非 INNER JOIN 。
Something like:
Use
LEFT JOIN
instead ofINNER JOIN
if you want to show rows for IDs in table1 without any matches in table2.我知道的最快的方法是这样的:
The quickest way I know of is this: