在同张表内用一个字段等于另一个字段为条件查询第三个字段的值

时间:2021-09-03 19:18:50
因为客户信息存储时有一个上级客户编码,现在要以编码在同一张表内找出上级客户的名称。
如:
客户编码                客户名称              上级客户编码
 001                        天津公司 
 002                        北京公司
 00101                    天津滨海区公司      001
 00201                    北京故宫公司          002
现在需要以第三列等于第一列为条件,查出客户对应上级客户的名称,希望各位能予以指导,谢谢。

7 个解决方案

#1



with tmp as
(
select '001' c1, '天津公司' c2, null c3 from dual union all
select '002' c1, '北京公司' c2, null c3 from dual union all
select '00101' c1, '天津滨海区公司' c2, '001' c3 from dual union all
select '00201' c1, '北京故宫公司' c2, '002' c3 from dual
)
 select  t1.c1 "客户编码",t1.c2 "客户名称 ",t2.c2 "上级客户名称"
   from tmp t1
   left join tmp t2 on t1.c3= t2.c1

#2


我上面的sql可以实现

#3


引用 2 楼 qq646748739 的回复:
我上面的sql可以实现

谢谢,这个前面可以省略直接用最后的查询语句吗?

#4


放心,是完全可以的~

#5


用递归调用就可以啦,有些是要查询很多个上级的

#6


引用 3 楼 qq_39864588 的回复:
Quote: 引用 2 楼 qq646748739 的回复:

我上面的sql可以实现

谢谢,这个前面可以省略直接用最后的查询语句吗?

select  t1.c1 "客户编码",t1.c2 "客户名称 ",t2.c2 "上级客户名称"
   from tmp t1
   left join tmp t2 on t1.c3= t2.c1
其中的表名和字段名改成你实际的表名和字段即可。

#7


用start with  ...connect by 应该可以实现吧??这个用法不怎么熟也难理解  好好研究下

#1



with tmp as
(
select '001' c1, '天津公司' c2, null c3 from dual union all
select '002' c1, '北京公司' c2, null c3 from dual union all
select '00101' c1, '天津滨海区公司' c2, '001' c3 from dual union all
select '00201' c1, '北京故宫公司' c2, '002' c3 from dual
)
 select  t1.c1 "客户编码",t1.c2 "客户名称 ",t2.c2 "上级客户名称"
   from tmp t1
   left join tmp t2 on t1.c3= t2.c1

#2


我上面的sql可以实现

#3


引用 2 楼 qq646748739 的回复:
我上面的sql可以实现

谢谢,这个前面可以省略直接用最后的查询语句吗?

#4


放心,是完全可以的~

#5


用递归调用就可以啦,有些是要查询很多个上级的

#6


引用 3 楼 qq_39864588 的回复:
Quote: 引用 2 楼 qq646748739 的回复:

我上面的sql可以实现

谢谢,这个前面可以省略直接用最后的查询语句吗?

select  t1.c1 "客户编码",t1.c2 "客户名称 ",t2.c2 "上级客户名称"
   from tmp t1
   left join tmp t2 on t1.c3= t2.c1
其中的表名和字段名改成你实际的表名和字段即可。

#7


用start with  ...connect by 应该可以实现吧??这个用法不怎么熟也难理解  好好研究下