将多列连接到同一列的有效方法? - SQL
Efficient way to join multiple columns to the same column? - SQL
我有一堆 table 组合在一起,每个都有一列包含某种形式的 user_id
。这导致总共有 12 user_id
列。
我想将每个 user_id
列与映射 table 中的 user_id
列连接起来,以便为每个用户 ID 检索 username
.
所以(假设我有 5 user id
列),
输入:
My Combined Tables Result:
t1.user_id t2.user_id t3.user_id t4.user_id t5.user_id
1 2 3 4 5
Mapping Table:
user_id username
1 A
2 B
3 C
4 D
5 E
输出:
t1.username t2.username t3.username t4.username t5.usernamne
A B C D E
我的代码类似于:
SELECT m1.username, m2.username, m3.username, m4.username, m5.username
FROM {join logic for 5 tables here}
JOIN mapping m1
ON t1.user_id = m1.user_id
JOIN mapping m2
ON t2.user_id = m2.user_id
JOIN mapping m3
ON t3.user_id = m3.user_id
JOIN mapping m4
ON t4.user_id = m4.user_id
JOIN mapping m5
ON t5.user_id = m5.user_id
我意识到这是非常低效的,特别是对于 12 列,这意味着 12 JOIN
s。有没有更好或更快的方法来做到这一点?谢谢!
您可能会发现为每个用户名使用相关的子查询更容易,尤其是在您必须实现许多列的情况下,因为它更容易剪切和粘贴!
类似于:
select
(select Username from Mapping m where m.UserId = t.UserId1) Username1,
(select Username from Mapping m where m.UserId = t.UserId2) Username2,
(select Username from Mapping m where m.UserId = t.UserId3) Username3 etc
from InputTable t
我有一堆 table 组合在一起,每个都有一列包含某种形式的 user_id
。这导致总共有 12 user_id
列。
我想将每个 user_id
列与映射 table 中的 user_id
列连接起来,以便为每个用户 ID 检索 username
.
所以(假设我有 5 user id
列),
输入:
My Combined Tables Result:
t1.user_id t2.user_id t3.user_id t4.user_id t5.user_id
1 2 3 4 5
Mapping Table:
user_id username
1 A
2 B
3 C
4 D
5 E
输出:
t1.username t2.username t3.username t4.username t5.usernamne
A B C D E
我的代码类似于:
SELECT m1.username, m2.username, m3.username, m4.username, m5.username
FROM {join logic for 5 tables here}
JOIN mapping m1
ON t1.user_id = m1.user_id
JOIN mapping m2
ON t2.user_id = m2.user_id
JOIN mapping m3
ON t3.user_id = m3.user_id
JOIN mapping m4
ON t4.user_id = m4.user_id
JOIN mapping m5
ON t5.user_id = m5.user_id
我意识到这是非常低效的,特别是对于 12 列,这意味着 12 JOIN
s。有没有更好或更快的方法来做到这一点?谢谢!
您可能会发现为每个用户名使用相关的子查询更容易,尤其是在您必须实现许多列的情况下,因为它更容易剪切和粘贴!
类似于:
select
(select Username from Mapping m where m.UserId = t.UserId1) Username1,
(select Username from Mapping m where m.UserId = t.UserId2) Username2,
(select Username from Mapping m where m.UserId = t.UserId3) Username3 etc
from InputTable t