如何从XML数据库中获取XQuery中的不同值? [英] How to get distinct values in XQuery from XML database ?

查看:67
本文介绍了如何从XML数据库中获取XQuery中的不同值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆