2011-11-01 112 views
2

使用Enrollment.xml和Person.xml文档,我试图列出拥有所有A的学生的名字。 Person中的ID字段指的是注册中的StudentID字段。有一个在入学为每个人在(每名学生没有一个条目)招收类条目XQuery查询,使用两个xml文档

我似乎无法弄清楚如何编写查询

Enrollment.xml形式 - >

<Document> 
    <Table> 
    <StudentID>170815037</StudentID> 
    <Grade>C</Grade> 
    </Table> 
    <Table> 
    <StudentID>193847547</StudentID> 
    <Grade>A</Grade> 
    </Table> 
</Document> 

Person.xml形式 - >

<Document> 
    <Table> 
    <Name>Wee Fletcher</Name> 
    <ID>115423723</ID> 
    </Table> 
</Document> 

继承人是林试图工作,我不能让它的工作

for $a in doc("proj3/Person.xml")/Document/Table/ID 
where every $s in doc("proj3/Enrollment.xml")//Table[StudentID = $a] 
      satisfies ($s/Grade = "A") 
    return $a/Name; 

回答

2

有一个小问题:你设置$adoc("proj3/Person.xml")/Document/Table/ID,并稍后访问$a/Name(返回不存在的.../Table/ID/Name)。

变化在第一线的分配,在第二比较(添加/ID这里),你的代码将被罚款:

for $a in doc("proj3/Person.xml")/Document/Table 
where every $s in doc("proj3/Enrollment.xml")//Table[StudentID = $a/ID] 
      satisfies ($s/Grade = "A") 
    return $a/Name; 
+0

我已经添加了功课标签,并张贴了我到目前为止所。任何意见? – user446836

+0

尝试“任何地方”(认为这是您声明中的唯一问题)或我提供的连接模式。可能使用连接模式将导致查询编译器中更好的优化,因为它更通用。 –

+0

不会“哪里有”列出有一个或多个A的学生?我的查询是寻找有ALL A的学生。 – user446836