我正在尝试编写一个查询,如下所示:
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行,所以没有用。
我怎样才能消除那些在城市字段中为空的重复行?我希望我的问题很明确。
答案 0 :(得分:0)
这是一个postgresql错误。
在sd.city_id = p.id
上左连接参数p
试试这个
left join parameter p on p.id = p.id
WHERE sd.city_id = p.id
(我已经回答了这个问题,所以任何寻找的人现在都会知道这个错误)