繁体   English   中英

一个表的内部联接并防止重复?

[英]inner join of one table and prevent duplicate?

我有一张桌子叫

使用以下列进行交易(已删除大量冗余数据)

trade_id,buyer_company_code,seller_company_code,legacy_trade_number。

我打算查询所有交易,其中某笔交易的buyer_company_code =另一笔交易的seller_company_code和该笔交易的seller_company_code =另一笔买家的buyer_company代码

我尝试使用查询生成以下屏幕截图

select * from trade tradetable1 inner join trade tradetable2
 on tradetable1.seller_company_code=tradetable2.buyer_company_code and tradetable1.buyer_company_code=tradetable2.seller_company_code
    and tradetable1.legacy_trade_number<tradetable2.legacy_trade_number

在此处输入图片说明

目前,它给我以下内容(来自一项交易的legacy_trade_number)和(来自另一项交易的legacy_trade_numbe)具有重复项(由于笛卡尔积)

5548 5554
5548 5555
5548 5556
5549 5554
5549 5555
5549 5556
5550 5554
5550 5555
5550 5556

但我要求它如下

5548 5554
5549 5555
5550 5556

如果两列没有重复值。 任何建议/提示都会有所帮助! 谢谢

如果您不想为legacy_trade_number列重复结果,则应该选择select真正需要的列,而不要选择*

select distinct tradetable1.legacy_trade_number from (
    select * from trade 
) tradetable1 
inner join ( 
select * 
from trade ) tradetable2 on tradetable1.seller_company_code=tradetable2.buyer_company_code 
    and tradetable1.buyer_company_code=tradetable2.seller_company_code
    and tradetable1.legacy_trade_number<tradetable2.legacy_trade_number

任何方式都可以使用简单的方法获得结果

select disticnt t1.legacy_trade_number 
from  trade  t1 
inner join trade t2 on on t1.seller_company_code=t2.buyer_company_code 
    and t1.buyer_company_code=t2.seller_company_code
    and t1.legacy_trade_number<t2.legacy_trade_number

在行级别评估重复项,因此..如果您需要其他列,则应选择所需的值,并使用聚集函数来减少无用的值

例如:使用聚合函数作为min(),您可以

select t1.legacy_trade_number, min(t1.col1), min(t2.coln)
from  trade  t1 
inner join trade t2 on on t1.seller_company_code=t2.buyer_company_code 
    and t1.buyer_company_code=t2.seller_company_code
    and t1.legacy_trade_number<t2.legacy_trade_number
  group by t1.legacy_trade_number

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM