我有一个名为
的表使用以下列进行交易(已删除大量冗余数据)
trade_id,buyer_company_code,seller_company_code,legacy_trade_number。
我打算查询所有交易,其中某笔交易的Buyer_company_code =另一笔交易的Seller_company_code,而该笔交易的Seller_company_code =另一笔买方的Buyer_company Code
我尝试了查询,结果显示在下面的屏幕截图中
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
其中两列没有重复值。任何建议/提示都会有所帮助!谢谢
答案 0 :(得分:3)
如果您不想为legacy_trade_number列重复结果,则应该选择select真正需要的列,而不是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