我的 postgresql 数据库中以 xml 格式存储数据。对于某些记录,有多个 xml,但我想根据优先级仅选择一个。
出版物_id | xml |
---|---|
162382550 |
|
162382550 |
|
我想选择加载源为
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}');
好的,它可以使用 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;