2016-11-22 37 views
1

我們如何從下面的表中刪除的邏輯重複(即,當從和向是同一站要麼2行應返回)預先如何刪除邏輯重複在Oracle

from_station| to _station| distance 
delhi |  mumbai | 5000 
mumbai |  delhi | 5000 
delhi |  cochin | 3000 
cochin |  delhi | 3000 

由於

+0

你有一些id爲獲得單行?+ – scaisEdge

+0

你是什麼意思的邏輯重複?在StackOverflow的問題中儘量具體,以增加回答的機會。 – Blackbam

回答

1

如果你只是想回報結果,那麼你可以做:

select t.* 
from t 
where t.from_station < t.to_station 
union all 
select t.* 
from t 
where t.from_station > t.to_station and 
     not exists (select 1 
        from t t2 
        where t2.from_station = t.to_station and t2.to_station = t.from_station 
       ); 

另一種機制是使用聚合:

select least(t.from_station, t. _station) as from_station, 
     greatest(t.from_station, t. _station) as to_station, 
     avg(distance) 
from t 
group by least(t.from_station, t. _station), 
     greatest(t.from_station, t. _station); 

但是,這可以引入不在原始數據中的行(如果兩個城市對之間只存在一行)。

+0

正確答案的匿名downvotes? –

+0

@EngineerDollery。 。 。當我沒有名譽時,我也犯了下調的錯誤。我沒有意識到它真的只是造成敵意,會讓人們忽略你,並阻止讓別人聽我說的話。幾年前,我放棄了冷火雞,儘管我是一個評論,標誌和關閉的狂熱用戶。我會注意到,我不認爲我經常(匿名)匿名低估。 –

+0

@kbball - 它不是拖釣。該網站有標準和投票是爲了鼓勵高質量的問題*和答案*。如果我覺得答案不夠好,我完全有權下調它。如果您不喜歡該網站的工作方式,請隨時爲更改進行宣傳。 –

2
select distinct 

     least (from_station,to_station) 
     ,greatest (from_station,to_station) 
     ,distance 

from  t 
+0

你能解釋一下這是什麼嗎?然後我會刪除我的'代碼只有答案是壞的'downvote –

+0

@EngineerDollery。 。 。如果你知道SQL,這個答案(以及我的)也很自我解釋。一個解釋說:「得到站名中較小者和站名較大的不同值」實際上並沒有增加太多的答案。 –

+2

@EngineerDollery,不,這實際上是英語。 –