左连接后重复行(postgres)

时间:2016-10-19 12:55:21

标签: postgresql duplicates left-join greatest-n-per-group

我正在尝试编写一个查询,如下所示:

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 |

我不想要第3和第5行。要避免这些行在其城市列中具有空值,并且" 具有完全相同的数据,除了城市字段" (我的意思是城市实际上可以是空的,就像在最后一行一样,但是排#2使得第3行没用,所以我只想要第2行)我使用了distinct on(scoreId),但是由于我丢失了第2行而没有排第3行,所以没有用。

我怎样才能消除那些在城市字段中为空的重复行?我希望我的问题很明确。

1 个答案:

答案 0 :(得分:0)

这是一个postgresql错误。

  

在sd.city_id = p.id

上左连接参数p

试试这个

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

(我已经回答了这个问题,所以任何寻找的人现在都会知道这个错误)