xquery return value off by one
<?xml version="1.0" encoding="UTF-8"?>
<library>
<items>
<book asin="0201100886"
created="128135928"
lastLookupTime="128135928">
<uuid>BA57A934-6CDC-11D9-830B-000393D3DE16</uuid>
<title>Compilers</title>
<authors>
<author>Alfred V. Aho</author>
<author>Ravi Sethi</author>
<author>Jeffrey D. Ullman</author>
</authors>
<publisher>Addison Wesley</publisher>
<published>1986-01-01</published>
<price>102.00</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0122513363" created="128135600" lastLookupTime="128136224">
<uuid>F7468E09-6CDB-11D9-830B-000393D3DE16</uuid>
<title>Database Driven Web Sites</title>
<authors><author>Jesse Feiler</author></authors>
<publisher>Morgan Kaufmann</publisher>
<published>1998-04-15</published>
<edition>Paperback</edition>
<price>50.95</price>
<purchaseDate>2005-01-22</purchaseDate>
<currentValue>35.00</currentValue>
<netRating>1.5</netRating>
<genres>
<genre>Computer Bks - Internet</genre>
<genre>Computer Books: Web Programming</genre>
<genre>Computer Networks</genre>
<genre>Computers</genre>
<genre>Database Management - General</genre>
<genre>Database management</genre>
<genre>Design</genre>
<genre>Distributed Databases</genre>
<genre>Information Technology</genre>
<genre>Internet - Web Site Design</genre>
<genre>Networking - General</genre>
<genre>Web sites</genre>
<genre>Computers / Computer Science</genre>
</genres>
<upc>608628133638</upc>
</book>
<book asin="0201441241"
created="128136896"
lastLookupTime="128136896">
<uuid>FBC45DF4-6CDE-11D9-830B-000393D3DE16</uuid>
<title>Introduction to Automata Theory, Languages, and Computation (2nd Edition)</title>
<authors>
<author>John E. Hopcroft</author>
<author>Rajeev Motwani</author>
<author>Jeffrey D. Ullman</author>
</authors>
<publisher>Addison Wesley</publisher>
<published>2000-11-14</published>
<price>108.20</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0471250600"
created="128136896"
lastLookupTime="128136896">
<uuid>FBC7CA56-6CDE-11D9-830B-000393D3DE16</uuid>
<title>Operating System Concepts</title>
<authors>
<author>Abraham Silberschatz</author>
<author>Greg Gagne</author>
<author>Peter Baer Galvin</author>
</authors>
<publisher>Wiley</publisher>
<published>2002-03-08</published>
<price>107.95</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0321193628"
created="128136896"
lastLookupTime="128136896">
<uuid>FBCB3DCF-6CDE-11D9-830B-000393D3DE16</uuid>
<title>Concepts of Programming Languages, Sixth Edition</title>
<authors><author>Robert W. Sebesta</author></authors>
<publisher>Addison Wesley</publisher>
<published>2003-07-24</published>
<price>112.40</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0138613370" created="128136944" lastLookupTime="128136944">
<uuid>19E5E602-6CDF-11D9-830B-000393D3DE16</uuid>
<title>First Course in Database Systems, A</title>
<authors>
<author>Jeffrey D. Ullman</author>
<author>Jennifer Widom</author>
</authors>
<publisher>Prentice Hall</publisher>
<published>1997-04-02</published>
<edition>Hardcover</edition>
<price>67.00</price>
<purchaseDate>2005-01-22</purchaseDate>
<netRating>3.2</netRating>
<genres>
<genre>Computer Books: Database</genre>
<genre>Computers</genre>
<genre>Database Engineering</genre>
<genre>Database Management - General</genre>
<genre>Database management</genre>
</genres>
<recommendations>
<book asin="0130402648"
created="128136952"
lastLookupTime="128136952">
<uuid>1C60074A-6CDF-11D9-830B-000393D3DE16</uuid>
<title>Database System Implementation</title>
<authors>
<author>Hector Garcia-Molina</author>
<author>Jeffrey D. Ullman</author>
<author>Jennifer D. Widom</author>
</authors>
<publisher>Prentice Hall</publisher>
<published>1999-06-11</published>
<price>89.00</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0130319953"
created="128136952"
lastLookupTime="128136952">
<uuid>1C635DB0-6CDF-11D9-830B-000393D3DE16</uuid>
<title>Database Systems: The Complete Book</title>
<authors>
<author>Hector Garcia-Molina</author>
<author>Jeffrey D. Ullman</author>
<author>Jennifer D. Widom</author>
</authors>
<publisher>Prentice Hall</publisher>
<published>2001-10-02</published>
<price>98.00</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0201976994"
created="128136952"
lastLookupTime="128136952">
<uuid>1C66B7B4-6CDF-11D9-830B-000393D3DE16</uuid>
<title>Computer Networking: A Top-Down Approach Featuring the Internet</title>
<authors>
<author>James F. Kurose</author>
<author>Keith W. Ross</author>
<author>James Kurose</author>
<author>Keith Ross</author>
</authors>
<publisher>Addison Wesley</publisher>
<published>2002-07-17</published>
<price>100.00</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0131433512"
created="128136952"
lastLookupTime="128136952">
<uuid>1C6AC88C-6CDF-11D9-830B-000393D3DE16</uuid>
<title>Computer Networks and Internets, Fourth Edition</title>
<authors>
<author>Douglas E Comer</author>
<author>Ralph E. Droms</author>
</authors>
<publisher>Prentice Hall</publisher>
<published>2003-07-28</published>
<price>100.00</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0262062178"
created="128136952"
lastLookupTime="128136952">
<uuid>1C6E712C-6CDF-11D9-830B-000393D3DE16</uuid>
<title>Essentials of Programming Languages - 2nd Edition</title>
<authors>
<author>Daniel P. Friedman</author>
<author>Mitchell Wand</author>
<author>Christopher T. Haynes</author>
</authors>
<publisher>The MIT Press</publisher>
<published>2001-01-29</published>
<price>62.00</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0471250600"
created="128136952"
lastLookupTime="128136952">
<uuid>1C71B23E-6CDF-11D9-830B-000393D3DE16</uuid>
<title>Operating System Concepts</title>
<authors>
<author>Abraham Silberschatz</author>
<author>Greg Gagne</author>
<author>Peter Baer Galvin</author>
</authors>
<publisher>Wiley</publisher>
<published>2002-03-08</published>
<price>107.95</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0137903952"
created="128136952"
lastLookupTime="128136952">
<uuid>1C764AD4-6CDF-11D9-830B-000393D3DE16</uuid>
<title>Artificial Intelligence: A Modern Approach (2nd Edition)</title>
<authors>
<author>Stuart J. Russell</author>
<author>Peter Norvig</author>
</authors>
<publisher>Prentice Hall</publisher>
<published>2002-12-20</published>
<price>93.33</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="155860832X"
created="128136952"
lastLookupTime="128136952">
<uuid>1C898640-6CDF-11D9-830B-000393D3DE16</uuid>
<title>Computer Networks: A Systems Approach, 3rd Edition</title>
<authors>
<author>Larry L. Peterson</author>
<author>Bruce S. Davie</author>
</authors>
<publisher>Morgan Kaufmann</publisher>
<published>2003-05-22</published>
<price>89.95</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0130669474"
created="128136952"
lastLookupTime="128136952">
<uuid>1C8DD37A-6CDF-11D9-830B-000393D3DE16</uuid>
<title>SQL Fundamentals (2nd Edition)</title>
<authors><author>John J. Patrick</author></authors>
<publisher>Prentice Hall PTR</publisher>
<published>2002-05-07</published>
<price>54.99</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0321122267"
created="128136952"
lastLookupTime="128136952">
<uuid>1C91D772-6CDF-11D9-830B-000393D3DE16</uuid>
<title>Fundamentals of Database Systems, Fourth Edition</title>
<authors>
<author>Ramez Elmasri</author>
<author>Shamkant B. Navathe</author>
</authors>
<publisher>Addison Wesley</publisher>
<published>2003-07-23</published>
<price>104.20</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
</recommendations>
</book>
<book asin="1558604820" created="128136024" lastLookupTime="128136024">
<uuid>F3C7B24F-6CDC-11D9-830B-000393D3DE16</uuid>
<title>A Complete Guide to DB2 Universal Database</title>
<authors>
<author>D. D. Chamberlin</author>
<author>Don Chamberlin</author>
</authors>
<publisher>Morgan Kaufmann</publisher>
<published>1998-08-15</published>
<edition>Paperback</edition>
<price>62.95</price>
<purchaseDate>2005-01-22</purchaseDate>
<netRating>4.4</netRating>
<genres>
<genre>Computer Bks - Data Base Management</genre>
<genre>Computer Books: Database</genre>
<genre>Computers</genre>
<genre>Database Management - General</genre>
<genre>General</genre>
<genre>IBM Database 2</genre>
<genre>Information Storage & Retrieval</genre>
<genre>Relational Databases</genre>
<genre>Computers / Information Storage & Retrieval</genre>
</genres>
<recommendations>
<book asin="0072133449"
created="128136024"
lastLookupTime="128136024">
<uuid>F6B35F21-6CDC-11D9-830B-000393D3DE16</uuid>
<title>DB2: The Complete Reference (Complete Reference Series)</title>
<authors>
<author>Roman B. Melnyk</author>
<author>Paul C. Zikopoulos</author>
</authors>
<publisher>McGraw-Hill Companies</publisher>
<published>2001-10-01</published>
<price>59.99</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0130661112"
created="128136024"
lastLookupTime="128136024">
<uuid>F6B97E54-6CDC-11D9-830B-000393D3DE16</uuid>
<title>DB2 UDB v8 Handbook for Windows and UNIX/Linux</title>
<authors><author>Philip K. Gunning</author></authors>
<publisher>Prentice Hall PTR</publisher>
<published>2003-08-06</published>
<price>59.99</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0131007726"
created="128136024"
lastLookupTime="128136024">
<uuid>F6BCBB88-6CDC-11D9-830B-000393D3DE16</uuid>
<title>DB2 SQL Procedural Language for Linux, Unix and Windows</title>
<authors>
<author>Paul Yip</author>
<author>Drew Bradstock</author>
<author>Hana Curtis</author>
<author>Michael Gao</author>
<author>Zamil Janmohamed</author>
<author>Clara Liu</author>
<author>Fraser McArthur</author>
</authors>
<publisher>Prentice Hall PTR</publisher>
<published>2002-12-24</published>
<price>59.99</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0131424653"
created="128136024"
lastLookupTime="128136024">
<uuid>F6C0A296-6CDC-11D9-830B-000393D3DE16</uuid>
<title>DB2 UDB V8.1 Certification Exam 700 Study Guide</title>
<authors><author>Roger E. Sanders</author></authors>
<publisher>Prentice Hall PTR</publisher>
<published>2003-09-17</published>
<price>49.99</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0764508415"
created="128136024"
lastLookupTime="128136024">
<uuid>F6C4058C-6CDC-11D9-830B-000393D3DE16</uuid>
<title>DB2 Fundamentals Certification for Dummies</title>
<authors>
<author>Paul C. Zikopoulos</author>
<author>Jennifer Gibbs</author>
<author>Roman B. Melnyk</author>
</authors>
<publisher>For Dummies</publisher>
<published>2001-08-01</published>
<price>34.99</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0130463612"
created="128136024"
lastLookupTime="128136024">
<uuid>F6D9A3D8-6CDC-11D9-830B-000393D3DE16</uuid>
<title>DB2 Universal Database V8 for Linux, UNIX, and Windows Database Administration Certification Guide (5th Edition)</title>
<authors>
<author>George Baklarz</author>
<author>Bill Wong</author>
</authors>
<publisher>Prentice Hall PTR</publisher>
<published>2003-02-10</published>
<price>59.99</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0130463884"
created="128136024"
lastLookupTime="128136024">
<uuid>F6DDBAB9-6CDC-11D9-830B-000393D3DE16</uuid>
<title>Advanced DBA Certification Guide and Reference for DB2 UDB v8 for Linux, Unix and Windows</title>
<authors>
<author>Dwaine R. Snow</author>
<author>Thomas Xuan Phan</author>
<author>Dwaine Snow</author>
</authors>
<publisher>Prentice Hall PTR</publisher>
<published>2003-07-07</published>
<price>59.99</price>
<purchaseDate>开发者_如何转开发;2005-01-22</purchaseDate>
</book>
<book asin="155860443X"
created="128136024"
lastLookupTime="128136024">
<uuid>F6E1063D-6CDC-11D9-830B-000393D3DE16</uuid>
<title>Advanced Database Systems (The Morgan Kaufmann Series in Data Management Systems)</title>
<authors>
<author>Carlo Zaniolo</author>
<author>Stefano Ceri</author>
<author>Christos Faloutsos</author>
<author>Richard T. Snodgrass</author>
<author>V. S. Subrahmanian</author>
<author>Roberto Zicari</author>
</authors>
<publisher>Morgan Kaufmann</publisher>
<published>1997-05-01</published>
<price>88.95</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0131840487"
created="128136024"
lastLookupTime="128136024">
<uuid>F6E441CE-6CDC-11D9-830B-000393D3DE16</uuid>
<title>DB2 UDB V8.1 Certification Exams 701 and 706 Study Guide</title>
<authors><author>Roger E. Sanders</author></authors>
<publisher>Prentice Hall PTR</publisher>
<published>2003-12-12</published>
<price>49.99</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
<book asin="0132037955"
created="128136024"
lastLookupTime="128136024">
<uuid>F6E77C2C-6CDC-11D9-830B-000393D3DE16</uuid>
<title>DB2 High Performance Design and Tuning</title>
<authors>
<author>Richard Yevich</author>
<author>Susan Lawson</author>
<author>Richard A. Yevich</author>
</authors>
<publisher>Prentice Hall PTR</publisher>
<published>2000-08-24</published>
<price>54.99</price>
<purchaseDate>2005-01-22</purchaseDate>
</book>
</recommendations>
</book>
</items>
<borrowers>
<borrower id="1">
<name> John Doe </name>
<phone> 555-1212 </phone>
<borrowed>
<book asin="0138613370"/>
<book asin="0122513363"/>
</borrowed>
</borrower>
<borrower id="2">
<name> Mary Jane </name>
<phone> 555-1213 </phone>
<borrowed>
<book asin="0201100886"/>
<book asin="0122513363"/>
</borrowed>
</borrower>
<borrower id="3">
<name> Bill Jones </name>
<phone> 555-1312 </phone>
<borrowed />
</borrower>
<borrower id="4">
<name> Anne Marie</name>
<phone> 555-1314</phone>
<borrowed>
<book asin="0138613370"/>
<book asin="0201100886"/>
<book asin="0122513363"/>
<book asin="1558604820"/>
</borrowed>
</borrower>
</borrowers>
</library>
I need to return everyone that borrowed a book, their name and the title of the book.
Here is my xQuery:
xquery version "1.0";
for $library in doc("library.xml")/library
for $book in $library/items/book
let $borrowed := $library/borrowers/borrower
return
<borrower>
<name>
{data($borrowed/name)}
</name>
<title>
{data($book[@asin = $borrowed//book/@asin]/title)}
</title>
</borrower>
Here is what it returns:
<borrower>
<name> John Doe Mary Jane Bill Jones Anne Marie</name>
<title>Compilers</title>
</borrower>
<borrower>
<name> John Doe Mary Jane Bill Jones Anne Marie</name>
<title>Database Driven Web Sites</title>
</borrower>
<borrower>
<name> John Doe Mary Jane Bill Jones Anne Marie</name>
<title/>
</borrower>
<borrower>
<name> John Doe Mary Jane Bill Jones Anne Marie</name>
<title/>
</borrower>
<borrower>
<name> John Doe Mary Jane Bill Jones Anne Marie</name>
<title/>
</borrower>
<borrower>
<name> John Doe Mary Jane Bill Jones Anne Marie</name>
<title>First Course in Database Systems, A</title>
</borrower>
<borrower>
<name> John Doe Mary Jane Bill Jones Anne Marie</name>
<title>A Complete Guide to DB2 Universal Database</title>
</borrower>
So first thing that is wrong is that it is returning all the names of people who have borrowed a book instead of one name per tag. Second, it should return 8 books and its only returning 7.
Can anyone please help me understand what is wrong with my xQuery????
I'm pretty sure you're trying to get a list of each borrower with the titles of the books they have borrowed. The problem with your XQuery is that you are iterating over each /library/items/book
instead of each borrower. Also, there are only 7 /library/items/book
in your example; not 8.
This XQuery should do what you want.
XQuery
<borrowers>
{
let $library := doc('library.xml')
for $borrower in $library/library/borrowers/borrower
let $name := $borrower/name
let $asins := data($borrower/borrowed/book/@asin)
let $titles :=
for $asin in $asins
return $library/library/items/book[@asin = $asin]/title
return
<borrower>
{$name}
{$titles}
</borrower>
}
</borrowers>
Results
<borrowers>
<borrower>
<name> John Doe </name>
<title>First Course in Database Systems, A</title>
<title>Database Driven Web Sites</title>
</borrower>
<borrower>
<name> Mary Jane </name>
<title>Compilers</title>
<title>Database Driven Web Sites</title>
</borrower>
<borrower>
<name> Bill Jones </name>
</borrower>
<borrower>
<name> Anne Marie</name>
<title>First Course in Database Systems, A</title>
<title>Compilers</title>
<title>Database Driven Web Sites</title>
<title>A Complete Guide to DB2 Universal Database</title>
</borrower>
</borrowers>
I have no experience with XQuery, but as far as I can see, your predicate [@asin = $borrowed//book/@asin]
should be moved into the let
statement, otherwise there is no connection, no link between $book and $borrowed at all. And since you already have a specific book in $book, there is no need for the predicate when returning the book title.
Frankly, I would probably take another approach: instead of looping over the books, why don't you loop over the borrowers? After all, you "need to return everyone that borrowed a book, their name and the title of the book"…
精彩评论