4张表:
User  用户表
Id
Name数据: 1   用户1
Dossier  档案表
Id
Name
UserId数据: 1   xxx档案   1
2   zzzz档案  1


DossierBehavior   档案行为表
DossierId(档案表的Id)
Behavior (行为)
AdminId
CreateTime数据: 1  Create 1 2019-11-25
1  Update 1 2019-11-29





Admin 管理员表
Id
Name

数据:  1  管理员1 1行为表有多个记录或者没有记录我想查出结果是:
当UserId = 1时Id Name Behavior BehaviorTime AdminName
1 xxx档案 Update 2019-11-29 管理员1
2 zzzz档案 null null null
Behavior表要根据CreateTime升序取第一条。其实就是取时间最近的一条。这是我的查询语句SELECT *FROM [Dossier] d Left JOIN [DossierBehavior] dh ON ( [d].[Id] = [dh].[DossierId] )  Left JOIN [Admin] ad ON ( [dh].[AdminId] = [ad].[Id] )   WHERE ((( [d].[UserId] = 1 ) AND ( [d].[Status] = 1 )) AND ( [dh].[Id] =(SELECT TOP 1 [Id] FROM [DossierBehavior] WHERE ( [DossierId] = [d].[Id] ) ORDER BY [CreateTime] DESC)))
因为第二个档案表的DossierBehavior为空导致第二个档案查询不出结果Id Name Behavior BehaviorTime AdminName
1 xxx档案 Update 2019-11-29 管理员1
除了单独去遍历,有什么处理方法吗?

解决方案 »

  1.   

    试试下面的
    SELECT *
    FROM [Dossier] d Left JOIN 
    (SELECT * FROM [DossierBehavior] A WHERE NOT EXISTS (SELECT 1 FROM [DossierBehavior] WHERE A.DossierId=DossierId AND CreateTime>A.CreateTime)) dh ON ( [d].[Id] = [dh].[DossierId] )  
    Left JOIN [Admin] ad ON ( [dh].[AdminId] = [ad].[Id] )   
    WHERE  [d].[UserId] = 1  AND  [d].[Status] = 1