如何使用XQuery对两个XML文件执行笛卡尔积连接操作
你需要的是对部门集合和员工集合做全量笛卡尔积组合,直接使用双层for循环遍历两个集合后生成指定节点即可,代码如下:
<result> { (: 遍历所有部门 :) for $dept in doc("departments.xml")/departments/department (: 遍历所有员工 :) for $emp in doc("employees.xml")/employees/employee return <dep-emp> <department>{data($dept/name)}</department> <employee>{data($emp/name)}</employee> </dep-emp> } </result>
如果是在测试环境中不方便读取外部XML文件,可以直接把XML内容定义为变量运行,写法如下:
let $emps := <employees> <employee cod="E01" dept="D01"> <name>John</name> <middle-name>S.</middle-name> <lastname>Gladstone</lastname> </employee> <employee cod="E02" dept="D01"> <name>Ana</name> <lastname>Ferraz</lastname> </employee> </employees> let $depts := <departments> <department cod="D01"> <name>Sales</name> <local>3rd floor</local> </department> <department cod="D02"> <name>Finances</name> <local>4th floor</local> </department> </departments> return <result> { for $dept in $depts/department for $emp in $emps/employee return <dep-emp> <department>{data($dept/name)}</department> <employee>{data($emp/name)}</employee> </dep-emp> } </result>
如果你后续需要实现按员工所属部门匹配的内连接效果,只需要在两层for之后增加where条件where $dept/@cod = $emp/@dept即可。
内容的提问来源于stack exchange,提问作者user16295898
相关产品推荐
相关产品推荐

