首页 > 解决方案 > 在 1:N 关系中只选择一个值

问题描述

我想在查询结果中只有一个值,即第一个值或最后一个值,我尝试了很多东西但我无法解决它,查询太长但我只为你选择了我所在的部分卡住了。

    select eccev.extra_data , c.id, 
case when (eccev.extra_data::json->'tns')::VARCHAR = 'false'
    then 'NON'
    else case when coalesce((eccev.extra_data::json->'tns')::VARCHAR, '') = '' then 'EMPTY VALUE' else 'OUI'
end end as tns
from endorsement_contract_covered_element_version eccev, endorsement_contract_covered_element ecce, endorsement_contract ec, contract c, endorsement e, party_party pp 
WHERE ec.endorsement = e.id 
and e.applicant = pp.id
and c.subscriber = pp.id 
AND eccev.covered_element_endorsement = ecce.id 
and ecce.contract_endorsement = ec.id
and c.contract_number = 'CT20200909112'

有了这个查询,我得到了结果

{"qualite":"non_etu","tns":false}   199479  NON
{"qualite":"non_etu","tns":false}   199479  NON
{"qualite":"non_etu","tns":false}   199479  NON

我只想有第一行或最后一行,所以我没有在其他行上重复,我看到我们可以使用 first_value(X over (XX)) 但我做不到。

如果你们能帮助我,我将不胜感激谢谢

标签: sqlpostgresql

解决方案


你可以试试这个

select distinct on (eccev.extra_data , c.id) eccev.extra_data , c.id, case when ...

但是您的查询似乎没有优化,因为您将 6 个表交叉连接在一起......


推荐阅读