连接两个 SQL tables,其中来自 table 1 的外部 ID 在 table 2 中出现两次
Joining two SQL tables where external ID from table 1 appears twice in table 2
我在加入两个 table 时遇到问题,其中一个 ID 在另一个 table 中多次使用。
以下是 table:
第 1 (groups_table):
Group_ID
Group_name
1
第一组
2
第二组
第二(transactions_table):
Transaction_ID
外部_Group_ID
内部_Group_ID
1
1
2
2
2
1
输出应如下所示(要从 table 1 添加组名):
Transaction_ID
External_Group
Internal_Group
1
第一组
第二组
2
第二组
第一组
您需要加入 groups_table
两次才能获得您想要的结果。让我们先设置您的数据:
if object_id('groups_table') is not null
drop table groups_table
CREATE TABLE groups_table
([Group_ID] int, [Group_name] varchar(12))
;
INSERT INTO groups_table
([Group_ID], [Group_name])
VALUES
(1, 'First group'),
(2, 'Second group')
;
if object_id('transactions_table') is not null
drop table transactions_table
CREATE TABLE transactions_table
([Transaction_ID] int, [External_Group_ID] int, [Internal_Group_ID] int)
;
INSERT INTO transactions_table
([Transaction_ID], [External_Group_ID], [Internal_Group_ID])
VALUES
(1, 1, 2),
(2, 2, 1)
;
然后当您查询表时,您将加入 groups_table
两次:
select
tt.Transaction_ID,
ExternalGroup = g1.Group_name,
InternalGroup = g2.Group_name
from transactions_table tt
left join groups_table g1
on tt.[External_Group_ID] = g1.Group_ID
left join groups_table g2
on tt.[Internal_Group_ID] = g2.Group_ID
这应该 return 结果(参见 Demo):
Transaction_ID
ExternalGroup
InternalGroup
1
First group
Second group
2
Second group
First group
我在加入两个 table 时遇到问题,其中一个 ID 在另一个 table 中多次使用。
以下是 table:
第 1 (groups_table):
Group_ID | Group_name |
---|---|
1 | 第一组 |
2 | 第二组 |
第二(transactions_table):
Transaction_ID | 外部_Group_ID | 内部_Group_ID |
---|---|---|
1 | 1 | 2 |
2 | 2 | 1 |
输出应如下所示(要从 table 1 添加组名):
Transaction_ID | External_Group | Internal_Group |
---|---|---|
1 | 第一组 | 第二组 |
2 | 第二组 | 第一组 |
您需要加入 groups_table
两次才能获得您想要的结果。让我们先设置您的数据:
if object_id('groups_table') is not null
drop table groups_table
CREATE TABLE groups_table
([Group_ID] int, [Group_name] varchar(12))
;
INSERT INTO groups_table
([Group_ID], [Group_name])
VALUES
(1, 'First group'),
(2, 'Second group')
;
if object_id('transactions_table') is not null
drop table transactions_table
CREATE TABLE transactions_table
([Transaction_ID] int, [External_Group_ID] int, [Internal_Group_ID] int)
;
INSERT INTO transactions_table
([Transaction_ID], [External_Group_ID], [Internal_Group_ID])
VALUES
(1, 1, 2),
(2, 2, 1)
;
然后当您查询表时,您将加入 groups_table
两次:
select
tt.Transaction_ID,
ExternalGroup = g1.Group_name,
InternalGroup = g2.Group_name
from transactions_table tt
left join groups_table g1
on tt.[External_Group_ID] = g1.Group_ID
left join groups_table g2
on tt.[Internal_Group_ID] = g2.Group_ID
这应该 return 结果(参见 Demo):
Transaction_ID | ExternalGroup | InternalGroup |
---|---|---|
1 | First group | Second group |
2 | Second group | First group |