首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在XQuery中进行自然连接

如何在XQuery中进行自然连接
EN

Stack Overflow用户
提问于 2013-11-17 08:58:08
回答 1查看 4.1K关注 0票数 1

我使用这个条款的目的是列出住在旧金山但在硅谷工作的员工。目前,我的条款正在努力找出哪些员工住在旧金山,但我不知道如何加入EmployeeList和WorkInfo的两份名单,才能让住在旧金山的员工找到其中哪些名字也在硅谷工作。

到目前为止,我的条款是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for $x in /EmpDatabase/PersonList/Contents/Person
where $x/City='San Fran'
order by $x/Name
return $x/Name

以下是我的XML数据文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<EmpDatabase>
<PersonList Type="Employee">
<Title Value="Employee List"/>
<Contents>
<Person>
    <Name>Susan L. Anderson</Name>
    <City>San Fran</City>
    <Gender>F</Gender>
</Person>
<Person>
    <Name>Dan L. Brady</Name>
    <City>Sacramento</City>
    <Gender>M</Gender>
</Person>
<Person>
    <Name>Peter K. Chen</Name>
    <City>San Fran</City>
    <Gender>M</Gender>
</Person>
</Contents>
</PersonList>

<CompanyList Type="Company">
<Title Value="Company List"/>
<Contents>
<Company>
    <Name>Google</Name>
    <City>Silicon Valley</City>
</Company>
<Company>
    <Name>Riot</Name>
    <City>LA</City>
</Company>
</Contents>
</CompanyList>

<InfoList Type="Works">
<Title Value="Works List"/>
<Contents>
<Works>
    <Name>Susan L. Anderson</Name>
    <Company>Google</Company>
    <Salary>48000</Salary>
</Works>
<Works>
    <Name>Dan L. Brady</Name>
    <Company>Google</Company>
    <Salary>42000</Salary>
</Works>
<Works>
    <Name>Peter K. Chen</Name>
    <Company>Riot</Company>
    <Salary>53000</Salary>
</Works>
</Contents>
</InfoList>
</EmpDatabase>

自然加入是正确的方式吗?自然连接是如何用XQuery编写的?我是否需要在另一个文件中写一个单独的条款,列出在硅谷工作的员工,然后以某种方式加入这两个条款的结果?

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-17 11:26:31

我将$x重命名为$person,以给它一个更有意义的名称。

您可以制定一个隐式联接,但更容易制定实际要寻找的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for $person in /EmpDatabase/PersonList/Contents/Person
(: retrieve company $person is working for :)
let $works := /EmpDatabase/InfoList/Contents/Works[Name=$person/Name]
where $person/City='San Fran'
(: See if the company has a department in Silicon Valley :)
where /EmpDatabase/CompanyList/Contents/Company[Name=$works/Company and City='Silicon Valley']
order by $person/Name
return $person/Name

如果您喜欢“经典”联接,只需使用多个for循环:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for $person in /EmpDatabase/PersonList/Contents/Person
for $works in /EmpDatabase/InfoList/Contents/Works
for $company in /EmpDatabase/CompanyList/Contents/Company
where $person/City='San Fran'
where $person/Name=$works/Name
where $works/Company=$company/Name
where $company/City='Silicon Valley'
order by $person/Name
return $person/Name
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20033481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文