将相同的 table 加入不同的列
Join same table with different column
嗨,这可能是一个愚蠢的问题,但我有一个场景,我的列 tl1、tl2 和 tl3 引用列 ID table 结构如下,
id | name | email | tl1 | tl1 | tl3 |
1 | xyz |x@g.com| null| 1 | 2 |
======================================
2 | abc |z@g.com| null| 1 | 3 |
======================================
3 | def |d@g.com| 1 | 2 | 4 |
所以需要编写一个查询来获取 tl1、tl2 和 tl3 的名称,
喜欢下面
id | name | email | tl1 | tl1 | tl3 |
1 | xyz |x@g.com| null| xyz | abc |
======================================
2 | abc |z@g.com| null| xyz | def|
======================================
3 | def |d@g.com| xyz | abc | ghi |
我无法为这种情况创建查询,我实际上创建了一个但没有获得唯一记录
这是我试过的查询
select distinct a.branch_code,a.email,a.partner_name,a.role_assigned,a.category,b.partner_name as tl1,
c.partner_name as tl2,d.partner_name as tl3
from branch_master as a
left join branch_master as b on b.tl1 = a.branch_code
left join branch_master as c on c.tl2 = a.branch_code
left join branch_master as d on d.tl3 = a.branch_code
如有任何帮助,我们将不胜感激。
首先,这通常是一种错误的数据格式——通常,您需要不同 table 中的值。在某些情况下,跨列数据可能有意义——例如,如果角色不同:submitted_by
、processed_by
、approved_by
。但一般来说,你想要 junction/association table.
不过,您的问题的解决方案是多个左连接:
select t.*, t1.email as email1, t2.email as email2, t2.email as email3
from t left join
t t1
on t1.tl1 = t.id left join
t t2
on t2.tl2 = t.id left join
t t3
on t3.tl3 = t.id;
您需要左加入 table 自身 3 次:
select
t.id, t.name, t.email,
t1.name name1, t2.name name2, t3.name name3
from tablename t
left join tablename t1 on t1.id = t.tl1
left join tablename t2 on t2.id = t.tl2
left join tablename t2 on t3.id = t.tl3
嗨,这可能是一个愚蠢的问题,但我有一个场景,我的列 tl1、tl2 和 tl3 引用列 ID table 结构如下,
id | name | email | tl1 | tl1 | tl3 |
1 | xyz |x@g.com| null| 1 | 2 |
======================================
2 | abc |z@g.com| null| 1 | 3 |
======================================
3 | def |d@g.com| 1 | 2 | 4 |
所以需要编写一个查询来获取 tl1、tl2 和 tl3 的名称,
喜欢下面
id | name | email | tl1 | tl1 | tl3 |
1 | xyz |x@g.com| null| xyz | abc |
======================================
2 | abc |z@g.com| null| xyz | def|
======================================
3 | def |d@g.com| xyz | abc | ghi |
我无法为这种情况创建查询,我实际上创建了一个但没有获得唯一记录
这是我试过的查询
select distinct a.branch_code,a.email,a.partner_name,a.role_assigned,a.category,b.partner_name as tl1,
c.partner_name as tl2,d.partner_name as tl3
from branch_master as a
left join branch_master as b on b.tl1 = a.branch_code
left join branch_master as c on c.tl2 = a.branch_code
left join branch_master as d on d.tl3 = a.branch_code
如有任何帮助,我们将不胜感激。
首先,这通常是一种错误的数据格式——通常,您需要不同 table 中的值。在某些情况下,跨列数据可能有意义——例如,如果角色不同:submitted_by
、processed_by
、approved_by
。但一般来说,你想要 junction/association table.
不过,您的问题的解决方案是多个左连接:
select t.*, t1.email as email1, t2.email as email2, t2.email as email3
from t left join
t t1
on t1.tl1 = t.id left join
t t2
on t2.tl2 = t.id left join
t t3
on t3.tl3 = t.id;
您需要左加入 table 自身 3 次:
select
t.id, t.name, t.email,
t1.name name1, t2.name name2, t3.name name3
from tablename t
left join tablename t1 on t1.id = t.tl1
left join tablename t2 on t2.id = t.tl2
left join tablename t2 on t3.id = t.tl3