p
u
b
l
i
c
i
t
é
publicité

Discussion: jointure avec FLWOR [XQUERY]

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    avril 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2010
    Messages : 136
    Points : 42
    Points
    42

    Par défaut jointure avec FLWOR

    Bonjour
    soit la requète XQuery:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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

  2. #2
    Expert Confirmé Sénior
    Avatar de Loceka
    Inscrit en
    mars 2004
    Messages
    2 056
    Détails du profil
    Informations forums :
    Inscription : mars 2004
    Messages : 2 056
    Points : 4 084
    Points
    4 084

    Par défaut

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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}"/>

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    avril 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2010
    Messages : 136
    Points : 42
    Points
    42

    Par défaut

    merci infiniment pour l'explication. cet exemple (les deux requètes) montre bien la différence entre let et for

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. jointure avec 2 id différent pour 1 seul table.
    Par vermo dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 10/11/2005, 15h19
  2. jointure avec clé composée de 2 colonnes
    Par free07 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/10/2005, 07h07
  3. Réponses: 2
    Dernier message: 27/10/2005, 11h15
  4. jointure avec xslt
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/09/2005, 10h48
  5. [SAGE]Jointures avec SGBD
    Par mat.M dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 09/10/2003, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo