首页 > 解决方案 > 2 内连接在同一个表中,有 1 个可选列

问题描述

我正在尝试将我的UserAccount表连接到自身。

CreatedBy = UserId 产生CreatedByName

ModifiedBy = UserId 但这可以产生为空ModifiedByName

这是我的查询

SELECT b.UserId, b.Username, b.Name, b.CreatedBy, a.Name as CreatedByName, b.ModifiedBy, b.ModifiedDate from UserAccount
INNER JOIN UserAccount a ON a.CreatedBy = UserAccount.UserId
RIGHT OUTER JOIN UserAccount b ON b.ModifiedBy = a.UserId

但是这个查询只能得到ModifiedByName的join而不能得到CreatedByName

这是专栏:

  1. 用户 ID(整数)
  2. 名称 (nvarchar)
  3. 创建者 (int)
  4. 修改者 (int)

标签: sqlsql-server

解决方案


您应该将LEFT JOINs 用于两个连接——以防其中一个名称丢失。

此外,使用表示表的表别名使查询更易于编写和阅读:

SELECT ua.*, uac.Name as CreatedByName, uam.Name as ModfiedByName
FROM UserAccount ua LEFT JOIN
     UserAccount uac
     ON ua.CreatedBy = uac.UserId LEFT JOIN 
     UserAccount uam
     ON ua.ModifiedBy = uam.UserId;

推荐阅读