首页 > 解决方案 > 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

该操作应具有最少的连接和有限的成本。

标签: sqljoin

解决方案


此查询将为您提供所需的结果。请注意,您必须对JOINNames进行 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

更新

这是一个没有JOINs 的查询,在原始帖子之后的编辑中要求:

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

两个查询的 SQLFiddle 演示


推荐阅读