sql - 请求其他表中至少有 2 条记录
问题描述
我有这个文档 xml(短版):
<Artiste>
<artiste a_id="A62" a_p_id="UK" a_date_nais="07/06/1952" a_sexe="M">
<a_prenom>Liam</a_prenom>
<a_nom>Neeson</a_nom>
</artiste>
<artiste a_id="A66" a_p_id="UK" a_date_nais="08/09/1971" a_sexe="M">
<a_prenom>Martin</a_prenom>
<a_nom>Freeman</a_nom>
</artiste>
<Film>
<film f_id="F1" f_p_id="FR" f_r_id="A61">
<f_genre>P</f_genre>
<f_titre>Banlieue 13</f_titre>
<f_date_sortie>10/11/2004</f_date_sortie>
<f_resume>fiction française</f_resume>
<f_role ro_nom="Leïto" ro_a_id="A63"/>
<f_role ro_nom="Lola" ro_a_id="A64"/>
</film>
<film f_id="F2" f_p_id="NZ" f_r_id="A59">
<f_genre>A</f_genre>
<f_titre>Les seigneurs des anneaux</f_titre>
<f_date_sortie>19/12/2005</f_date_sortie>
<f_resume>fiction américaine</f_resume>
<f_role ro_nom="Pêcheur" ro_a_id="A25"/>
<f_role ro_nom="Sirène" ro_a_id="A2"/>
</film>
</Film>
一位艺术家在电影(电影)中演出,一位艺术家有一个“a_id”字段,Artiste
其中与 ro_a_id 中的字段相同Film
a_prenom, a_nom
我想选择至少出演过 2 部电影 ( ) 的每位艺术家的姓名 ( film
)
这就是我所做的:
for $artiste in doc('S:/path/file.xml')//Artiste/artiste
(: retrieve film $artiste is working in :)
let $film := ('S:/path/file.xml')//Film/film[@ro_a_id=$artiste/@a_id]
where count(@ro_a_id)>=2
order by $artiste/@a_id
return $x/a_nom, $x/a_prenom
所以我不知道如何加入和提出请求,也不知道如何返回 2 个字段(我知道该$x/a_nom, $x/a_prenom
行会产生错误)
解决方案
您非常接近,但您的查询有几个问题:
- 该
return
子句引用了一个未定义的变量$x
。这应该改为$artiste
- 一旦解决了这个问题,您就可以通过构造一个序列来返回每个参与者的两个名称元素——通过将项目包装在括号中:
($artiste/a_nom, $artiste/a_prenom)
. 或者,您可以返回单个项目,例如,通过连接两个名称部分创建的字符串,使用concat($artiste/a_nom, " ", $artiste/a_prenom)
. - 您的
where
子句应该引用$film
变量——特别是$film/f_role/@ro_a_id
. - 您在此处的示例数据不包含出现在所列电影中超过两部的任何艺术家。所以这个
where
子句,即使是固定的,也会导致 0 次命中。
我已经向http://xqueryfiddle.liberty-development.net/nbUY4kp/1发布了一个修改后的查询,显示了这些建议的更改。您会看到我注释掉了该where
子句,以便我们得到一些结果。
推荐阅读
- python - 用漂亮的汤从一列表格中提取内容
- docker - 主机 jenkins 无法访问暴露的 Docker 端口
- appium - Appium 服务器:SyntaxError: Unexpected token | 在 JSON.parse 的第 87 位的 JSON 中(
) - javascript - 为反应查询组件编写单元测试
- html5-canvas - mesibo : 如何将画布流添加到发布者
- apache-spark - spark中是否有类似Glue“书签”功能,可以跟踪工作级别?
- python - Python 超链接 Tkinter 标签
- python - 无法使用 Tkinter 单选按钮将数据插入数据库
- wordpress - 昨天我的博客停止工作并显示一个致命错误
- laravel - 雄辩的 laravel 关系 hasManyThrough