2016-10-19 52 views
0

我試圖寫一個如下的查詢:重複的行後,左連接(Postgres的)

select distinct bsg.id as bsgId, 
s.system_id as sysId, 
g.code_no as gameNo, 
u.user_name as nameOfUser, 
s.score_code as scoreId, 
p.name as cityOfGame 

from score s 
join scoreGr sg on sg.id = s.scoreGr_id 
join bigScoreGr bsg on sg.bigScoreGr_id = bsg.id 
join game g on bsg.fld_case_id = g.id 
join user u on s.user_id = u.id 
join system_number sn on g.id = sn.game_id 
join system_doc sd on sd.system_number_id = sn.id 
left join parameter p on sd.city_id = p.id 

直到我與參數表加入,如預期的結果。結果如下所示:

bsgId| sysId | gameNo | nameOfUser | scoreId 
-------------------------------------------------- 
1234 | abcde | G-12 | admin  | G-12/1/1 
1235 | abcdf | G-15 | admin  | G-15/1/3 
1234 | abcdf | G-12 | user1  | G-12/1/8 
1237 | abcdf | G-16 | user1  | G-16/2/4  

但是,參數表有些大,system_doc在其city_id列中有一些空值。當我添加我的查詢的左連接部分,它變成這樣:

bsgId| sysId | gameNo | nameOfUser | scoreId | city 
-------------------------------------------------- 
1234 | abcde | G-12 | admin  | G-12/1/1 | city1 
1235 | abcdf | G-15 | admin  | G-15/1/3 | city5 
1235 | abcdf | G-15 | admin  | G-15/1/3 | 
1234 | abcdg | G-12 | user1  | G-12/1/8 | city4 
1234 | abcdg | G-12 | user1  | G-12/1/8 | 
1237 | abcdf | G-16 | user1  | G-16/2/4 | 

我不想像第三和第五個行。爲了避免這些行在城市列中有空,並且「具有完全相同的數據,除了城市字段」(我的意思是實際上城市可以爲null,如在最後一行中,但是行#2使得行#3無用,所以我只想要行#2)我已經使用distinct on(scoreId),但它沒有工作,因爲我已經失去了行#2,但沒有行#3。

如何消除那些在其城市字段中爲空的重複行?我希望我的問題很清楚。

+0

據我所知,你希望'(bsgId,sysId,gameNo,nameOfUser,scoreId)'上的不同。不僅僅是'(scoreId)'上的獨特的' –

+0

實際上它們是相同的,因爲scoreId在你所寫的所有領域都是唯一的。但即便如此,我得到了不良結果。取而代之的是刪除空行的行,這個查詢有時會消除非空行 –

回答

1

這是一個postgresql錯誤。

左連接上sd.city_id參數p = p.id

試試這個

left join parameter p on p.id = p.id 
WHERE sd.city_id = p.id 

(我已經回答了這個讓任何人都在尋找現在知道了這個bug)