Грешка при операция на присъединяване в Xquery

Пример за моята XML база данни е както следва:

<releases>
<release id="1" status="Accepted">
    <artists>
      <artist>
        <id>1</id><name>Persuader, The</name><anv></anv><join></join><role></role><tracks></tracks></artist></artists><title>Stockholm</title><labels>
      <label catno="SK032" name="Svek"></label></labels><extraartists>
      <artist>
        <id>239</id><name>Jesper Dahlbäck</name><anv></anv><join></join><role>Music By [All Tracks By]</role><tracks></tracks></artist></extraartists><formats>
      <format name="Vinyl" qty="2" text="">
        <descriptions>
          <description>12"</description><description>33 ⅓ RPM</description></descriptions></format></formats><genres>
      <genre>Electronic</genre></genres><styles>
      <style>Deep House</style></styles><country>Sweden</country><released>1999-03-00</released><notes>The song titles are the names of Stockholm's districts.</notes><master_id>5427</master_id><data_quality>Complete and Correct</data_quality><tracklist>
      <track>
        <position>A</position><title>Östermalm</title><duration>4:45</duration></track><track>
        <position>B1</position><title>Vasastaden</title><duration>6:11</duration></track><track>
        <position>B2</position><title>Kungsholmen</title><duration>2:49</duration></track><track>
        <position>C1</position><title>Södermalm</title><duration>5:38</duration></track><track>
        <position>C2</position><title>Norrmalm</title><duration>4:52</duration></track><track>
        <position>D</position><title>Gamla Stan</title><duration>5:16</duration></track></tracklist><identifiers>
      <identifier description="A-Side" type="Matrix / Runout" value="MPO SK 032 A1 G PHRUPMASTERGENERAL T27 LONDON"></identifier><identifier description="B-Side" type="Matrix / Runout" value="MPO SK 032 B1"></identifier><identifier description="C-Side" type="Matrix / Runout" value="MPO SK 032 C1"></identifier><identifier description="D-Side" type="Matrix / Runout" value="MPO SK 032 D1"></identifier></identifiers><videos>
      <video duration="290" embed="true" src="http://www.youtube.com/watch?v=AHuQWcylaU4">
        <title>The Persuader (Jesper Dahlbäck) - Östermalm</title><description>The Persuader (Jesper Dahlbäck) - Östermalm</description></video><video duration="380" embed="true" src="http://www.youtube.com/watch?v=5rA8CTKKEP4">
        <title>The Persuader - Vasastaden</title><description>The Persuader - Vasastaden</description></video><video duration="335" embed="true" src="http://www.youtube.com/watch?v=QVdDhOnoR8k">
        <title>The Persuader-Stockholm-Sodermalm</title><description>The Persuader-Stockholm-Sodermalm</description></video><video duration="289" embed="true" src="http://www.youtube.com/watch?v=hy47qgyJeG0">
        <title>The Persuader - Norrmalm</title><description>The Persuader - Norrmalm</description></video></videos><companies>
      <company>
        <id>271046</id><name>The Globe Studios</name><catno></catno><entity_type>23</entity_type><entity_type_name>Recorded At</entity_type_name><resource_url>http://api.discogs.com/labels/271046</resource_url></company><company>
        <id>56025</id><name>MPO</name><catno></catno><entity_type>17</entity_type><entity_type_name>Pressed By</entity_type_name><resource_url>http://api.discogs.com/labels/56025</resource_url></company></companies></release><release id="2" status="Accepted">
    <artists>
      <artist>
        <id>2</id><name>Mr. James Barth &amp; A.D.</name><anv></anv><join></join><role></role><tracks></tracks></artist></artists><title>Knockin' Boots Vol 2 Of 2</title><labels>
      <label catno="SK 026" name="Svek"></label><label catno="SK026" name="Svek"></label></labels><extraartists>
      <artist>
        <id>26</id><name>Alexi Delano</name><anv></anv><join></join><role>Producer, Recorded By</role><tracks></tracks></artist><artist>
        <id>27</id><name>Cari Lekebusch</name><anv></anv><join></join><role>Producer, Recorded By</role><tracks></tracks></artist><artist>
        <id>26</id><name>Alexi Delano</name><anv>A. Delano</anv><join></join><role>Written-By</role><tracks></tracks></artist><artist>
        <id>27</id><name>Cari Lekebusch</name><anv>C. Lekebusch</anv><join></join><role>Written-By</role><tracks></tracks></artist></extraartists><formats>
      <format name="Vinyl" qty="1" text="">
        <descriptions>
          <description>12"</description><description>33 ⅓ RPM</description></descriptions></format></formats><genres>
      <genre>Electronic</genre></genres><styles>
      <style>Broken Beat</style><style>Techno</style><style>Tech House</style></styles><country>Sweden</country><released>1998-06-00</released><notes>All joints recorded in NYC (Dec.97).</notes><master_id>713738</master_id><data_quality>Correct</data_quality><tracklist>
      <track>
        <position>A1</position><title>A Sea Apart</title><duration>5:08</duration></track><track>
        <position>A2</position><title>Dutchmaster</title><duration>4:21</duration></track><track>
        <position>B1</position><title>Inner City Lullaby</title><duration>4:22</duration></track><track>
        <position>B2</position><title>Yeah Kid!</title><duration>4:46</duration></track></tracklist><identifiers>
      <identifier description="Side A Runout Etching" type="Matrix / Runout" value="MPO SK026-A -J.T.S.-"></identifier><identifier description="Side B Runout Etching" type="Matrix / Runout" value="MPO SK026-B -J.T.S.-"></identifier></identifiers><videos>
      <video duration="365" embed="true" src="http://www.youtube.com/watch?v=MXqC4-ei_zE">
        <title>Mr. james Barth &amp; Alexi Delano</title><description>Mr. james Barth &amp; Alexi Delano</description></video><video duration="260" embed="true" src="http://www.youtube.com/watch?v=FWkM_3MQKZk">
        <title>'Dutchmaster' - Mr. James Barth &amp; A.D. (knockin' boots vol 2)</title><description>'Dutchmaster' - Mr. James Barth &amp; A.D. (knockin' boots vol 2)</description></video></videos><companies>
      <company>
        <id>266169</id><name>JTS Studios</name><catno></catno><entity_type>29</entity_type><entity_type_name>Mastered At</entity_type_name><resource_url>http://api.discogs.com/labels/266169</resource_url></company><company>
        <id>56025</id><name>MPO</name><catno></catno><entity_type>17</entity_type><entity_type_name>Pressed By</entity_type_name><resource_url>http://api.discogs.com/labels/56025</resource_url></company></companies></release></releases>

Опитвам се да получа списък със заглавия, където заглавието е същото като издание/изпълнители/изпълнител/име, използвайки XQuery. Опитвам се да използвам следния код:

let $r := db:open("releases1","releases.xml") return
for $b in $r/releases/release
let $a := 
          for $t in $r/releases/release/artists
          where $t/artist/name/text() = $b/title/text()
          return $t
 return $b/title

Получавам обаче грешни резултати. Какво правя грешно

Резултатът е както следва:

<title>Stockholm</title>
<title>Knockin' Boots Vol 2 Of 2</title>
<title>Profound Sounds Vol. 1</title>
<title>Moving Cities</title>
<title>Flowerhead</title>
<title>Knockin' Boots (Vol 1 Of 2)</title>
<title>Moonchildren EP</title>.......50,000

Получавам 50 000/50 000 резултати. Това е невъзможно. „Стокхолм“ е заглавието на горното. Имената на артистите обаче не съвпадат. Тези резултати не трябва да се включват.


person Community    schedule 25.07.2015    source източник
comment
Моля, разгледайте Как да питам и как да публикувате SSCCE. Какъв е резултатът, който получавате, и особено какъв е очакваният резултат? Ако възникне действителна грешка, какво е съобщението за грешка?   -  person Jens Erat    schedule 26.07.2015
comment
Моля, добавете примерен резултат към вашия въпрос (като го редактирате), както за това, което получавате в момента, така и за това, което искате да имате. Това е много важна и подходяща част от такива въпроси, за да избегнете объркване и дълги разговори за това какво точно искате да постигнете.   -  person Jens Erat    schedule 26.07.2015
comment
Наистина не разбирам какво искаш да направиш. Вие предложихте доста малка извадка от вашата база данни. Събирането на очаквания изход, който съответства на този примерен вход, трябва да бъде тривиална задача (тъй като знаете какво искате да имате), която можете да направите за минута или две, но е много вероятно да бъде много ясна определение и обяснение какво се опитвате да постигнете. И аз изобщо не разбирам въпроса ти. Защо изчислявате $a, ако никога повече не го използвате? Възможно ли е просто да искате да имате return $a в последния ред?   -  person Jens Erat    schedule 26.07.2015
comment
Да, прав си. Най-накрая разбирам къде сбърках. Благодаря за помощта и много съжаляваме за липсата на яснота   -  person    schedule 26.07.2015


Отговори (1)


Нямаше нужда изразът FLWOR да се вгражда в друг.

for $t in db:open("releases1","releases.xml")/releases/release/artists
      where $t/artist/name = $t/../title
      return $t
person Community    schedule 25.07.2015
comment
В този случай изобщо няма нужда от FLWOR израз: db:open("releases1","releases.xml")/releases/release/artists[artist/name = ../title]. Но не съм сигурен, че това е еквивалентно на оригинала. - person Michael Kay; 26.07.2015
comment
Вярно. Просто исках еквивалент на Xquery. Също понякога. В пълния набор от данни има множество артисти. Дори ако едно име на изпълнител съвпада със заглавието, то трябва да се показва в резултатите - person ; 26.07.2015
comment
Освен това използването на text() тук е потенциално вредно... (може да прави това, което искате, но в този случай искате да сравнявате елементите по тяхната стойност на низ, както направи Майк). И двете са XQuery, едната не е XQuery еквивалент. - person Florent Georges; 26.07.2015