You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构造可选子查询使Wikidata查询每个机场仅返回一条记录

解决Wikidata机场查询的重复记录问题

你当前的查询会因为机场存在多种英文系标签(比如en、en-ca、en-gb)而返回重复记录,要实现每个机场仅返回一条记录,完全可以通过在optional里嵌套子查询来解决,核心思路是给不同英文变体设置优先级,只取优先级最高的那一条标签。

修改后的查询代码如下:

select
   ?airport
   ?airportName
   (lang(?airportName) as ?lang)
   ?IATAAirPortCode
{
   ?airport wdt:P238 ?IATAAirPortCode.
   optional {
     # 子查询筛选并排序英文系标签,只取第一条
     select ?airport ?airportName {
       ?airport rdfs:label ?airportName.
       filter(langMatches(lang(?airportName), 'en'))
     }
     order by 
       # 优先选择标准英文(en),再按语言标签排序确保结果稳定
       (if(lang(?airportName) = 'en', 1, 2)) 
       lang(?airportName)
     limit 1
   }
}
order by ?IATAAirPortCode

关键逻辑说明:

  • 子查询先筛选出所有匹配英文系的标签;
  • 通过order by给标准英文(en)设置最高优先级(排序值为1,其他英文变体为2),再按语言标签排序保证结果的稳定性;
  • 最后用limit 1只保留优先级最高的那一条标签,这样每个机场就只会返回一条记录。

内容的提问来源于stack exchange,提问作者René Nyffenegger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:31:15