sql - SQL Join 在一行的多个列上
问题描述
我有下表 IDDetails:
ID1 ID2 ID3
1 2 3
1 5 7 and so on
我想将行的每个 ID 与 Names 表中的名称链接:
ID Name
1 A
2 B
3 C
4 D
5 E
7 G
输出应该有 6 列,如:
ID1 Name1 ID2 Name2 ID3 Name3
1 A 2 B 3 C
1 A 5 E 7 G
该操作应具有最少的连接和有限的成本。
解决方案
此查询将为您提供所需的结果。请注意,您必须对JOIN
表Names
进行 3 次才能获得每行的三个不同名称。
SELECT i.ID1, n1.Name AS Name1,
i.ID2, n2.Name AS Name2,
i.ID3, n3.Name AS Name3
FROM IDDetails i
JOIN Names n1 on n1.ID = i.ID1
JOIN Names n2 on n2.ID = i.ID2
JOIN Names n3 on n3.ID = i.ID3
输出:
ID1 Name1 ID2 Name2 ID3 Name3
1 A 2 B 3 C
1 A 5 E 7 G
更新
这是一个没有JOIN
s 的查询,在原始帖子之后的编辑中要求:
SELECT i.ID1, (SELECT Name FROM Names n WHERE n.ID = i.ID1) AS Name1,
i.ID2, (SELECT Name FROM Names n WHERE n.ID = i.ID2) AS Name2,
i.ID3, (SELECT Name FROM Names n WHERE n.ID = i.ID3) AS Name3
FROM IDDetails i
输出:
ID1 Name1 ID2 Name2 ID3 Name3
1 A 2 B 3 C
1 A 5 E 7 G
推荐阅读
- google-maps - 如何在 Flutter 中的 Google 地图上绘制多边形并获取其中的所有 POI?
- python - 生成多个 OR/AND 语句
- android - 如何更新现有cordova项目android平台中的文件?
- asynchronous - 使用可完成的未来在 servlet 中执行异步任务会导致 java.lang.RuntimeException
- c# - 如何在通过 C# 创建的 Excel 公式中传递 Range 对象?
- typescript - 使用纱线工作区忽略项目中的 TS 错误
- javascript - 使用 Materialisecss 动态添加表格行
- php - 碳不相等的问题应该是
- postgresql - 酒保通过命令行配置
- php - Codeception 单元测试 [RuntimeException] 调用未定义的方法 UnitTester::haveRecord