微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

访问-基于主键PK将左联接添加到返回值

如何解决访问-基于主键PK将左联接添加到返回值

我需要帮助根据表中的主键值查询用户名

一个用户@ gordon-linoff帮助我创建了一个查询,以提取表中每个NoteDate的最新OpportunityID。我想扩展它以提供NotesUser,它与其他两个元素在同一表中。

我的挑战是NotesUser返回UserID(是PK)而不是UserName

这里是一个例子。这段代码

SELECT o.OpportunityID,n.NotesDate,n.NotesID,n.NotesUser
FROM (Opportunity AS o LEFT JOIN (SELECT n.* FROM tblNotes AS n WHERE n.NotesDate = (SELECT MAX(n2.NotesDate)
                            FROM tblNotes as n2
                           WHERE n2.OpportunityID = n.OpportunityID
                           ))  AS n ON o.OpportunityID = n.opportunityid) 
ORDER BY o.OpportunityID;

产生此结果:

enter image description here

NotesUser一个名为tblUsers的表的PK,该表包含两列。 IDUserName

这是我到目前为止获得的代码

SELECT o.OpportunityID,n.NotesUser,tblUsers.UserName
    FROM (Opportunity AS o LEFT JOIN 
         (SELECT n.* 
          FROM tblNotes AS n 
          WHERE n.NotesDate = (SELECT MAX(n2.NotesDate)
                              FROM tblNotes as n2 
                              WHERE n2.OpportunityID = n.OpportunityID)
              AS n ON o.OpportunityID = n.opportunityid) LEFT JOIN 
                                                                (SELECT tblUsers.UserName
                                                                 FROM tblUsers 
                                                                 WHERE n.NoteUser=tblusers.username) 
    ORDER BY o.OpportunityID;

代码在FROM语句中引发语法错误

更新:这是tblUsers的样子。

enter image description here

解决方法

如果我的理解正确,您只需添加一个LEFT JOIN。无需子查询:

SELECT o.OpportunityID,n.NotesDate,n.NotesID,n.NotesUser,u.username
FROM (Opportunity AS o LEFT JOIN 
      (SELECT n.*
       FROM tblNotes AS n
       WHERE n.NotesDate = (SELECT MAX(n2.NotesDate)
                            FROM tblNotes as n2
                            WHERE n2.OpportunityID = n.OpportunityID
                           )
      )  AS n
      ON o.OpportunityID = n.opportunityid
     ) LEFT JOIN
     tblUsers as u
     ON n.NoteUser = u.id
ORDER BY o.OpportunityID;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。