sql - 在 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)) 但我做不到。
如果你们能帮助我,我将不胜感激谢谢
解决方案
你可以试试这个
select distinct on (eccev.extra_data , c.id) eccev.extra_data , c.id, case when ...
但是您的查询似乎没有优化,因为您将 6 个表交叉连接在一起......
推荐阅读
- sql-server - SQL Server - 如何根据插入为重复或类似内容设置行 ID。选择查询
- angular - 根据角度检查单选更改货币
- java - 在 maven 构建步骤中设置 JAVA_OPTS 以注入 JaCoCo 代理
- active-directory - ActiveMQ 共享访问的 AD 凭据
- typescript - 如何在 TypeScript 的这个复杂类型定义中提取泛型类型?
- python - 我可以在 LDA 中获得一个单词的主题分布吗?
- python - 如何让我的代码回到python中的特定while循环?
- javascript - 如何通过在库中导入 OwlMomentDateTimeModule 在 Angular 应用程序中配置 jest?
- jquery - 如何通过jQuery删除带有双冒号的id?
- laravel - 具有存储库模式的 Laravel 策略