根据XML内容中的优先级选择行

问题描述 投票:0回答:1

我的 postgresql 数据库中以 xml 格式存储数据。对于某些记录,有多个 xml,但我想根据优先级仅选择一个。

出版物_id xml
162382550
{<abstract load-source="patent-office"><p num="0000">Text1</p></ abstract>}
162382550
{<abstract load-source="docdb"><p>Text2</p></abstract>}

我想选择加载源为

patent-office
的记录。如果此来源不可用,我想选择
docdb
。显然我不想同时选择两条记录。

我已经尝试过了,但显然它选择了 2 条记录并且它们都存在。

select publication_id,  xpath('/abstract', xml.content) as abstract from xml where publication_id = 162382550 and (xpath('abstract/@load-source', xml.content)::text  = '{patent-office}' OR xpath('abstract/@load-source', xml.content)::text  = '{docdb}');
xml postgresql
1个回答
0
投票

好的,它可以使用 ORDER BY 和 LIMIT 来工作

select publication_id,  xpath('/abstract', xml.content) as abstract
from xml abs
where publication_id = 162382550 and (xpath('abstract/@load-source', xml.content)::text  = '{patent-office}' OR xpath('abstract/@load-source', xml.content)::text  = '{docdb}')
ORDER BY CASE
    WHEN xpath('/abstract/@load-source', xml.content)::text = 'patent-office' THEN 1
    WHEN xpath('/abstract/@load-source', xml.content)::text = 'docdb' THEN 2                                                                                                                                                                                                                                                                                        ELSE 3 END
LIMIT 1;
© www.soinside.com 2019 - 2024. All rights reserved.