sql - 需要从左连接中的表中获取多个值
问题描述
我有一个包含如下数据的表格。
假设我有两个版本的项目,我需要将数据从旧版本迁移到新版本。
假设tblFolders
在版本1
+----+------------+--------------+--------------+
| id | FolderName | CreatedBy | ModifiedBy |
+----+------------+--------------+--------------+
| 1 | SIMPLE | 5 | 6 |
| 2 | SIMPLE1 | 8 | 1 |
+----+------------+--------------+--------------+
另一个表具有两个版本的用户 ID。
让我们说它tblUsersMapping
+----+----------------+-------------------+
| id | Version1UserID | Version2UserID |
+----+----------------+-------------------+
| 1 | 1 | 500 |
| 2 | 2 | 465 |
| 3 | 3 | 12 |
| 4 | 4 | 85 |
| 5 | 5 | 321 |
| 6 | 6 | 21 |
| 7 | 7 | 44 |
| 8 | 8 | 884 |
+----+----------------+-------------------+
现在我需要将数据从版本 1 传输到版本 2。当我传输数据时,CreatedBy和Modifiedby ids 应该是新版本的。
所以虽然我有如下数据
| 1 | SIMPLE | 5 | 6 |
它应该如下转移
| 1 | SIMPLE | 321 | 21 |
为此,到目前为止,我在这两个表之间添加了一个连接,如下所示。
SELECT id,
foldername,
B.version2userid AS CreatedBy
FROM tblfolders A WITH(nolock)
LEFT JOIN tblusersmapping B WITH(nolock)
ON A.createdby = B.version1userid
这将为我提供列CreatedBy的正确结果。
但是如何从 tblUsersMapping 获取 ModifiedBy 列的用户 ID?执行以下操作将不起作用,并且将为两列提供 NULL。
SELECT id,
foldername,
b.version2userid AS createdby,
b.version2userid AS modifiedby
FROM tblfolders A WITH(nolock)
LEFT JOIN tblusersmapping B WITH(nolock)
ON a.createdby = b.version1userid,
a.modifiedby = b.version1userid
一种方法是我可以使用 tblusersmapping 表添加另一个联接。但这不是一个好主意,因为表可能有大量数据,而另一个连接会影响查询的性能。
我的问题是如何根据 createdby 和 modifiedby 列从映射表中获取 Version1UserID 和 Version2UserID ?
解决方案
您可以使用多项选择,这可能会对您有所帮助。
SELECT id,
foldername,
(SELECT version2userid from tblUsersMapping where Version1UserID=tblfolders.CreatedBy) AS CreatedBy,
(SELECT version2userid from tblUsersMapping where Version1UserID=tblfolders.ModifiedBy) AS ModifiedBy
FROM tblfolders
推荐阅读
- android - Creating an android custom view instead of multiple views with different data
- r - R - 将 POSIXct 格式化为列表中的日期
- multithreading - 使用 python 跟踪调试
- windows - 这是匹配文件名的 for 命令中的错误吗?
- python - 如何将 pandas PeriodIndex 转换为特定的财政年度字符串格式?
- microsoft-graph-api - 修补来自共享收件箱的邮件不起作用
- android - 检查是否下载了android OCR
- javascript - 设置过滤器值后Jqgrid下拉过滤器不更新
- validation - 表单标签的自定义样式
- css - 插入嵌套元素