加入一个最大和空值

问题描述

我有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表的顶部匹配记录中获取更多列。

> ,

您可以使用以下查询:

Demo

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;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...