我有一个包含3列tab_1
,seller_name
,id_seller
的表id_buyer
,我希望显示另一个名为buyer_name
的列,其对应于{{ 1}}。
卖家也可以是买家,这也是他们拥有相同id_buyer
id
| corresponding code |
-----------------------
abc = 1005
ddd = 1009
ccc = 1006
aaa = 1002
zzp = 1186
tyu = 1001
我想要的结果如下所示:
tab_1:
| seller_name | id_seller | id_buyer|
-----------------|----------------------
| abc | 1005 | 1006 |
| ddd | 1009 | 1186 |
| ccc | 1006 | 1001 |
| ccc | 1006 | 1002 |
| ddd | 1009 | 1006 |
| tyu | 1001 | 1186 |
答案 0 :(得分:2)
create table #a
( buyer_name varchar(50), id_buyer int
)
insert into #a values
('abc',1005),
('ddd',1009),
('ccc',1006),
('aaa',1002),
('zzp',1186),
('tyu',1001)
create table #b
(
seller_name varchar(50), id_seller int, id_buyer int
)
insert into #b values
('abc',1005,1006),
('ddd',1009,1186),
('ccc',1006,1001),
('ccc',1006,1002),
('ddd',1009,1006),
('tyu',1001,1186)
select seller_name,id_seller,buyer_name,a.id_buyer from #a a join
#b b on a.id_buyer=b.id_buyer
or
SELECT
seller.seller_name, seller.id_seller, isnull(person.name,seller.seller_name) AS buyer_name, seller.id_buyer
FROM
#b seller
LEFT OUTER JOIN (SELECT DISTINCT seller_name AS name, id_seller AS id FROM #b) person ON
seller.id_buyer = person.id
答案 1 :(得分:1)
您可以在tab_1
上进行自我加入。
SELECT
seller.seller_name, seller.id_seller, person.name AS buyer_name, seller.id_buyer
FROM
tab_1 seller
-- workout the corresponding code table
LEFT OUTER JOIN (SELECT DISTINCT seller_name AS name, id_seller AS id FROM tab_1) person ON
seller.id_buyer = person.id
答案 2 :(得分:0)
使用Cross apply
获取列表。如果您想查看卖家列表中不会出现的买家代码,请使用Outer Apply
代替cross apply
。我建议您在表中维护相应的代码,因为买方可能不会出现在卖家列表栏中。
select DISTINCT t1.seller_name,id_seller,id_buyer,a.seller_name
from
#table1 t1 cross apply
(
select seller_name from #table1 t2 where t1.id_buyer=t2.id_seller
)a
答案 3 :(得分:0)
你应该自己加入table_1。在这里,我使用了左连接,因为您的记录中没有一个买家ID。
select a.seller_name,a.id_seller,a.id_buyer,b.seller_name
from tab_1 a
left join tab_1 b on a.id_buyer=b.id_seller
答案 4 :(得分:0)
您正在寻找的是“自我加入”
以下链接有助于self join