【问题标题】:Join same table with different column用不同的列连接同一张表
【发布时间】:2019-07-29 14:40:11
【问题描述】:

嗨,这可能是一个愚蠢的问题,但我有一个场景,我的列 tl1、tl2 和 tl3 引用列 id 表结构如下,

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

任何帮助将不胜感激。

【问题讨论】:

  • 请发表您尝试过的查询

标签: sql join left-join right-join


【解决方案1】:

你需要自己左加入表 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

【讨论】:

  • 感谢这项工作,你能解释为什么我的查询不起作用
  • 我不知道。有些列名不同。
  • 你为什么要使用 distinct?
  • 因为我的查询返回了重复的数据,所以认为通过放置 distinct 会给我正确的结果。
  • 你和我的查询唯一不同的是这部分left join branch_master as b on b.branch_code = a.tl1 left join branch_master as c on c.branch_code = a.tl2 left join branch_master as d on d.branch_code = a.tl3 不知道为什么我的查询给了我错误的数据
【解决方案2】:

首先,这通常是一种错误的数据格式——通常,您需要不同表中的值。在某些情况下,跨列存储数据可能有意义——例如,如果角色不同:submitted_byprocessed_byapproved_by。但通常,您需要一个联结/关联表。

不过,您的问题的解决方案是多个左连接:

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;

【讨论】:

  • 这给出了重复的数据
猜你喜欢
  • 2016-06-05
  • 2017-07-17
  • 2016-11-27
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多