PostgreSQL去重不起作用

5

我正在使用以下代码从数据库中获取值:

但是当我编写这段代码(测试以查看问题所在...)时,我注意到查询没有从数据库中提取出唯一的值: 以下是查询语句

select distinct(ca.id)as id, acc.name as accName,pIsu.name as pareentIsu, sIsu.name as subIsu , dv.domain_value as contractType,acc.id as accId,dvct.domain_value as contractstatus
from contracts_account ca left join business_unit pIsu on ca.parent_isu_fk = pIsu.id
left join business_unit sIsu on ca.sub_isu_fk = sIsu.id
left join business_unit acc on ca.account_fk = acc.id
left join contracts con on con.contracts_account_fk = ca.id
left join domain_values dv on dv.id = con.contract_type_fk
left join domain_values dvct on dvct.id = con.contract_status_fk
where ca.id is not null and con.contract_type_fk in ( 4466079 ) order by ca.id

这个查询根本没有返回给我'Distinct Id''
我做错了什么? 我正在使用Postgres 8.2


“Select distinct col1, col2, col3 ...” 不仅会返回不同的 col1 值,还会返回不同的 col1 + col2 + col3 组合。 - Dan
2个回答

14

您的查询被解释为:

select distinct (ca.id) as id, acc.name as accName, . . .

这是一个标准的distinct语句。如果您只想要每个ca.id的一行,其中值来自第一行(基于order by),那么请使用distinct on

select distinct on (ca.id) ca.id, acc.name as accName, . . .

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接