sql联接以获取比较表“a”中的两个值/行和表“b”中的同一行

ctzwtxfj  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(423)

我有两张table,下面是几行
表a(交易)

Order       Seller      Customer    
 1           300         500

表b(人)

PersonID          FullName        
300               Peter White
500               Scott Bold

我想要这样的结果

Order      Seller        Customer     FullName (Seller)      FullName  (customer)     
1          300           500          Peter White            Scott Bold

我尝试了多种方法,但更合理的方法是两次连接表,但我得到:
不明确的列名
这是sql server 2019。
基本上,我希望从同一个表中检索信息,而不是创建其他表。有可能吗?如果是,你怎么办?先谢谢你。

u0njafvf

u0njafvf1#

正如@jarlh在评论中写道的:

select t.order, t.seller, t.customer, sel.fullname, cust.fullname
from transaction t
join persons sel -- sel is an alias to persons table
  on sel.personid = t.seller
join persons cust
  on cust.personid = t.customer;

查询方式 join 只要卖家和客户都存在,就会返回结果 persons 表——这里它应该作为源表名 transactions :).

hgqdbh6s

hgqdbh6s2#

我有另一种形式的查询,它仍然连接表b两次。
这是一种古老的语法,我不建议使用这种语法,但对于初学者来说,应该了解join的概念:

select t.*,B.FullName as FullName  (customer)  from
(

select A.Order,A.Seller,A.Customer,B.FullName as FullName(Seller) 
    from A,B where A.Seller=B.PersionID
) t, B where t.Customer=B.PersionID

正确的连接方式:

select t.*,B.FullName as FullName  (customer)  from
(
select A.Order,A.Seller,A.Customer,B.FullName as FullName(Seller) 
        from A JOIN B ON A.Seller=B.PersionID
) t JOIN B ON t.Customer=B.PersionID

希望这能帮到你。

相关问题