如何解决加入一个最大和空值
我有2张桌子:
People:
ID | Name
----------
1 | John
2 | David
3 | Jennifer
第一个具有简单FK的另一个
Note:
ID | People_ID | Note
----------------------
1 | 1 | A note
2 | 1 | Another note
3 | 3 | Jen's note
我想从每个人的笔记中获取与max(ID)
关联的笔记,如果没有笔记,则为null,因此所需的结果是:
People_ID | Name | Note
----------------------------
1 |John | Another Note
2 |David | NULL
3 |Jennifer| Jen's Note
我可以执行连接,但不能包含David,因为最大条件不会带回null列。有什么帮助吗?
解决方法
那是left join
-我建议在子查询中预先汇总注释:
select p.*,n.*
from people p
left join (
select people_id,max(id) max_note_id
from note
group by people_id
) n on n.people_id = p.id
在某些情况下,横向连接会更有效:
select p.*,n.*
from people p
outer apply (
select top(1) id max_note_id
from note n
where n.people_id = p.id
order by id desc
) n
关于横向联接的好处是,您可以根据需要轻松地从note
表的顶部匹配记录中获取更多列。
您可以使用以下查询:
SELECT A.NAME,A.ID,MAX(B.ID) FROM PEOPLE A LEFT OUTER JOIN NOTE B
ON (A.ID = B.PEOPLE_ID) GROUP BY A.NAME,A.ID;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。