sql - 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
这是专栏:
- 用户 ID(整数)
- 名称 (nvarchar)
- 创建者 (int)
- 修改者 (int)
解决方案
您应该将LEFT JOIN
s 用于两个连接——以防其中一个名称丢失。
此外,使用表示表的表别名使查询更易于编写和阅读:
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;
推荐阅读
- python - Dask dataframe.read_csv 无法与 hdfs csv 文件一起正常工作
- excel - 如何使用 VBA 合并多个单元格
- flutter - 如何根据它们在 Dart 中的相同值组合多个对象?
- react-native - 如何在没有 Android Studio 和 Xcode 的情况下在 Windows 上生成反应原生 Android 和 ios 调试版本
- javascript - 我想在一个地方声明我的变量不重复代码,反应应用
- angular - 仅当用户返回(历史)时如何实现 RouteReuseStrategy?
- phpmyadmin - 无法以 root 身份登录 PhpMyAdmin
- c# - 如何在服务器端检索 aspnetboilerplate 核心项目本地化信息
- apache-flink - Flink流的动态复杂逻辑?
- alibaba-cloud - 使用 API/SDK 获取阿里巴巴产品的订阅和 PayAsYouGo 价格