如何从XML数据库中获取XQuery中的不同值? [英] How to get distinct values in XQuery from XML database ?
问题描述
以下xml:
< mo >
< 客户 >
< 客户 cno = 2222 >
< cname > Charles < / cname >
< street > 123 Main St. < / street >
< city > Wichita < / city >
< zip > 67226 < / zip >
< phone > 316-636-5555 < / phone >
< span class =code-keyword>< / customer > ;
< customer cno = 1000 >
< cname > Bismita < / cname >
< street > Ashford Dunwoody < / street >
< city > Wichita < / city >
< zip > 67226-1555 < / zip >
< phone > 000-000-0000 < / phone >
< / customer >
< / customers >
< 员工 >
< 员工 eno = 1000 < span class =code-keyword>>
< ename > Jones < / ename < span class =code-keyword>>
< city > Wichita < / city < span class =code-keyword>>
< zip > 67226-1555 < / zip >
< hdate > 1995-12-12 < / hdate >
< < span class =code-leadattribute> / employee >
< 员工 eno = 2000 >
< ename > Asmit < / ename >
< city > Wichita < / city >
< zip > 67226-1555 < / zip >
< hdate > 1967 -08-13 < / hdate >
< / employee >
< 员工 < span class =code-attribute> eno = 1003 >
< ename > Axaya < / ename >
< city > BBSR < / city >
< zip > 67226 < / zip >
< < span class =code-leadattribute> hdate > 1978-08-13 < / hdate >
< / employee >
< ; / employees >
< span class =code-keyword>< parts >
< part pno = 10506 >
< pname < span class =code-keyword>> 时间之前我< / pname >
< qoh > 200 < / qoh >
< price > 319.99 < / price >
< level > 20 < / level >
< / part >
< part pno = 10000 >
< pname > 瓶< / pname >
< qoh > 2 < / qoh >
< 价格 > 3.00 < / price >
< level > 2 < / level >
< / part >
< part pno = 10508 >
< pname > 在时间3之前着陆< / pname >
< qoh > 202 < / qoh >
< 价格 > 2.00 < /价格 >
< level > 22 < /级别 >
< / part >
< part pno = 10509 >
< pname > 周期< ; / pname >
< qoh > 202 < ; / qoh >
< 价格 > 1.00 < ; / price >
< level > 22 < / level >
< span class =code-keyword>< / part >
< / parts >
< 订单 >
< order ono = 1000 takenBy = 1000 customer = 2222 > ;
< receivedDate > 1967-08-17 < / receivedDate >
< shippedDate > 1967-08-13 < / shippedDate >
< items >
< item >
< < span class =code-leadattribute> partNumber > 10508 < / partNumber >
< < span class =code-leadattribute>数量 > 2 < / quantity >
< < span class =code-leadattribute> / item >
< / items >
< / order >
< 订单 ono = 1001 takenBy = 1000 customer = < span class =code-keyword> 1000 >
< span class =code-keyword>< receivedDate > 1968-08- 14 < / receivedDate >
< shippedDate > 1968-08-11 < / shippedDate >
< items >
< item >
< partNumber > 10000 < / partNumber >
< 数量 > 2 < / quantity >
< / item >
< / items >
< span class =code-keyword>< / order >
< 订单 ono = 1022 takenBy = 1003 customer = 2222 >
< receivedDate > 1995-02-14 < / receivedDate >
< shipmentDate > 1995-02-13 < / shipmentDate >
< items >
< item >
< partNumber > 10000 < / partNumber >
< 数量 > 1 < / quantity >
< / item >
< item >
< partNumber > 10508 < / partNumber >
< 数量 > 2 < / quantity >
< / item >
< item >
< partNumber > 10509 < / partNumber >
< 数量 > 3 < /数量 >
&l t; / item >
< / items >
< / order >
< / orders >
< / mo >
需要两个xquries。
1.获取订购员工零件的客户姓名在威奇托。
我试过下面xquery:
for
$ c in / mo / customers / customer,
$ e in / mo / employees / employee,
$ p in / mo / parts / part,
$ o in / mo / orders / order
where data($ p / @ PNO)= $ O /项目/ I tem / partNumber
和数据($ e / @ eno)=数据($ o / @ takenBy)
和$ e / city ='Wichita'
返回$ c / cname
问题:查询返回重复值,如何获得不同的值?
2.获取客户的姓名我只是向居住在威奇托的员工订购了零件。
我在xquery下面试过:
for
$ c in / mo / customers / customer,
$ e in / mo / employees / employee,
$ p in / mo / parts / part,
$ o in / mo / orders / order
其中data($ p / @ pno)= $ o / items / item / partNumber
和data($ e / @ eno)= data($ o / @ takenBy)
和数据($ e / city)eq(Wichita)
返回$ c / cname
问题:与具有重复值的查询1的结果相同。
注意:通过观察住在威奇托,只住在威奇托,两个查询之间应该有什么区别。
如何摆脱这些查询中返回的重复值?
有什么帮助?
c in / mo / customers / customer,
e in / mo / employees / employee,
p in / MO /部件/部分,
In below xml:
<mo>
<customers>
<customer cno="2222">
<cname>Charles</cname>
<street>123 Main St.</street>
<city>Wichita</city>
<zip>67226</zip>
<phone>316-636-5555</phone>
</customer>
<customer cno="1000">
<cname>Bismita</cname>
<street>Ashford Dunwoody</street>
<city>Wichita</city>
<zip>67226-1555</zip>
<phone>000-000-0000</phone>
</customer>
</customers>
<employees>
<employee eno="1000">
<ename>Jones</ename>
<city>Wichita</city>
<zip>67226-1555</zip>
<hdate>1995-12-12</hdate>
</employee>
<employee eno="2000">
<ename>Asmit</ename>
<city>Wichita</city>
<zip>67226-1555</zip>
<hdate>1967-08-13</hdate>
</employee>
<employee eno="1003">
<ename>Axaya</ename>
<city>BBSR</city>
<zip>67226</zip>
<hdate>1978-08-13</hdate>
</employee>
</employees>
<parts>
<part pno="10506">
<pname>Land Before Time I</pname>
<qoh>200</qoh>
<price>319.99</price>
<level>20</level>
</part>
<part pno="10000">
<pname>Bottle</pname>
<qoh>2</qoh>
<price>3.00</price>
<level>2</level>
</part>
<part pno="10508">
<pname>Land Before Time 3</pname>
<qoh>202</qoh>
<price>2.00</price>
<level>22</level>
</part>
<part pno="10509">
<pname>Cycle</pname>
<qoh>202</qoh>
<price>1.00</price>
<level>22</level>
</part>
</parts>
<orders>
<order ono="1000" takenBy="1000" customer="2222" >
<receivedDate>1967-08-17</receivedDate>
<shippedDate>1967-08-13</shippedDate>
<items>
<item>
<partNumber>10508</partNumber>
<quantity>2</quantity>
</item>
</items>
</order>
<order ono="1001" takenBy="1000" customer="1000" >
<receivedDate>1968-08-14</receivedDate>
<shippedDate>1968-08-11</shippedDate>
<items>
<item>
<partNumber>10000</partNumber>
<quantity>2</quantity>
</item>
</items>
</order>
<order ono="1022" takenBy="1003" customer="2222" >
<receivedDate>1995-02-14</receivedDate>
<shippedDate>1995-02-13</shippedDate>
<items>
<item>
<partNumber>10000</partNumber>
<quantity>1</quantity>
</item>
<item>
<partNumber>10508</partNumber>
<quantity>2</quantity>
</item>
<item>
<partNumber>10509</partNumber>
<quantity>3</quantity>
</item>
</items>
</order>
</orders>
</mo>
Two xquries are required.
1. Get the names of customers who have ordered parts from employees living in Wichita.
I have tried below xquery:
for
$c in /mo/customers/customer,
$e in /mo/employees/employee,
$p in /mo/parts/part,
$o in /mo/orders/order
where data($p/@pno)=$o/items/item/partNumber
and data($e/@eno)= data($o/@takenBy)
and $e/city='Wichita'
return $c/cname
Problem: Query returns duplicate values, how can I get distinct values ?
2. Get the names of customers who have ordered parts only from employees living in Wichita.
I have tried below xquery:
for
$c in /mo/customers/customer,
$e in /mo/employees/employee,
$p in /mo/parts/part,
$o in /mo/orders/order
where data($p/@pno)=$o/items/item/partNumber
and data($e/@eno)= data($o/@takenBy)
and data($e/city) eq("Wichita")
return $c/cname
Problem: Same result as query 1 with duplicate values.
Note: what should be the difference between two query by observing "living in Wichita and living only in wichita".
How can I get rid of returning duplicate values in these queries ?
Any help ?
c in /mo/customers/customer,
e in /mo/employees/employee,
p in /mo/parts/part,
这篇关于如何从XML数据库中获取XQuery中的不同值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!