[英]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.