Précédent   Forum du club des développeurs et IT Pro > Autres langages > XML/XSL et SOAP > XQUERY/SGBD
XQUERY/SGBD Le langage XQUERY et tout ce qui a trait aux relations XML et bases de données : BDD XML native, intégration/extraction de XML, XML dans BDD relationnelle... Avant de poster -> FAQ XML, Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/11/2011, 11h21   #1
win_ubuntu
Invité régulier
 
Inscription : avril 2010
Messages : 51
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 51
Points : 7
Points : 7
Par défaut jointure avec FLWOR

Bonjour
soit la requète XQuery:

Code :
1
2
3
4
5
6
7
for $p in doc("catalog.xml")//product
let $itm := doc("order.xml")/order/item[@num=$p/number]
where $p/number = $itm/@num
return
<item num="{$itm/@num}" name="{$p/name}" 
quantity="{$itm/@quantity}" 
color="{$itm/@color}"/>
le document: catalog.xml

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0"?>
<catalog>
<product dept="WMN">
<number>557</number>
<name language="en">Fleece Pullover</name>
<colorChoices>navy black</colorChoices>
</product>
<product dept="ACC">
<number>563</number>
<name language="en">Floppy Sun Hat</name>
</product>
<product dept="ACC">
<number>443</number>
<name language="en">Deluxe Travel Bag</name>
</product>
<product dept="MEN">
<number>784</number>
<name language="en">Cotton Dress Shirt</name>
<colorChoices>white gray</colorChoices>
<desc>Our <i>favorite</i> shirt!</desc>
</product>
</catalog>
le document: order.xml
Code :
1
2
3
4
5
6
7
8
9
<?xml version="1.0"?>
<order num="00299432" date="2006-09-15" cust="0221A">
<item dept="WMN" num="557" quantity="1" color="navy"/>
<item dept="ACC" num="563" quantity="1"/>
<item dept="ACC" num="443" quantity="2"/>
<item dept="MEN" num="784" quantity="1" color="white"/>
<item dept="MEN" num="784" quantity="1" color="gray"/>
<item dept="WMN" num="557" quantity="1" color="black"/>
</order>
résultat obtenu:
Code :
<item num="557 557" name="Fleece Pullover" quantity="1 1" color="navy black"/><item num="563" name="Floppy Sun Hat" quantity="1" color=""/><item num="443" name="Deluxe Travel Bag" quantity="2" color=""/><item num="784 784" name="Cotton Dress Shirt" quantity="1 1" color="white gray"/>
je n'attend pas ce résultat.j'aimerais avoir des éxplications sur le résultat obtenu.

Merci
win_ubuntu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 12h04   #2
Loceka
Expert Confirmé
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 800
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 800
Points : 2 918
Points : 2 918
En XQuery, comme en XPath, les opérations sont ensemblistes.

Ici par exemple, quand tu écris doc("order.xml")/order/item[@num=$p/number] (ce qui est redondant avec ta clause where soit dit en passant), tu remontes tous les items dont @num est égal à $p/number.

Ce qui fait que quand tu demandes de retourner le résultat de $itm/@attribut, il te retourne les valeurs de @attribut pour chaque item matché.

Ce qu'il faudrait faire, ce serait une boucle imbriquée :
Code :
1
2
3
4
5
for $p in doc("catalog.xml")//product
return for $itm in doc("order.xml")/order/item[@num=$p/number]
  return <item num="{$itm/@num}" name="{$p/name}" 
quantity="{$itm/@quantity}" 
color="{$itm/@color}"/>
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 14h30   #3
win_ubuntu
Invité régulier
 
Inscription : avril 2010
Messages : 51
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 51
Points : 7
Points : 7
merci infiniment pour l'explication. cet exemple (les deux requètes) montre bien la différence entre let et for
win_ubuntu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h33.


 
 
 
 
Partenaires

Hébergement Web