XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Rick ScofieldSubject: XQuery Nested Loop Lookup
Author: Rick Scofield
Date: 09 Feb 2014 10:27 AM
Need some help with a Xquery nested loop. Both files are about 30k lines long and growing. I'm trying to match the <Sku> value in the $mivabod file with the <upc> value in the $carhbod file and return the <sku> or <upc> and the <qtyavail> from the $carhbod file. I have the xquery code here that takes about 30min to complete.

something like...
SELECT $carhbod/qtyavail FROM $carhbod WHERE $mivabod/Sku = $carbod/upc
Can anyone help with a more efficient way to do this?
This xQuery takes way too long...

===begin code===
declare variable $mivabod as document-node(element(*, xs:untyped)) external;
declare variable $carbod as document-node(element(*, xs:untyped)) external;

<root>
{
for $miva in $mivabod/table/row/Sku
for $carh in $carbod/root/row[upc = $miva]
return
<carqty>
<UPC>{$miva/text()}</UPC>
<quantity>{$carh/qtyavail/text()}</quantity>
</carqty>
}
</root>
===end code===

Postnext
Ivan PedruzziSubject: XQuery Nested Loop Lookup
Author: Ivan Pedruzzi
Date: 09 Feb 2014 11:59 AM
Hi Rick,

Variable $A and $B mimic your input documents, the loop outputs the elements with the same id.

Does it help?

Ivan Pedruzzi
Stylus Studio Team



declare variable $A :=
<A>
<A id="0">A0</A>
<A id="1">A1</A>
</A>;

declare variable $B :=
<B>
<B id="0">B0</B>
<B id="2">B2</B>
</B>;

<root>{
for $a in $A/A,
$b in $B/B
where $a/@id = $b/@id
return <match A="{$a}" B="{$b}"/>
}</root>

=========================
<root>
<match A="A0" B="B0"/>
</root>

Postnext
Rick ScofieldSubject: XQuery Nested Loop Lookup
Author: Rick Scofield
Date: 09 Feb 2014 01:20 PM
Originally Posted: 09 Feb 2014 12:20 PM
Thanks Ivan, I believe I've tried your suggestion already. Is the following code doing the same as your suggestion?

I can see the difference, do id attributes match faster that elements?

declare variable $mivabod as document-node(element(*, xs:untyped)) external;
declare variable $carbod as document-node(element(*, xs:untyped)) external;

<root>
{
for $miva in $mivabod/table/row
for $carh in $carbod/root/row
where $miva/Sku/text() = $carh/upc/text()
return ...
...


Postnext
Ivan PedruzziSubject: XQuery Nested Loop Lookup
Author: Ivan Pedruzzi
Date: 10 Feb 2014 09:18 AM

If you cannot make it work, the only option is to send us samples of the two input documents at stylussupport@ivitechnologies.com

Ivan Pedruzzi
Stylus Studio Team

Posttop
Rick ScofieldSubject: XQuery Nested Loop Lookup
Author: Rick Scofield
Date: 10 Feb 2014 03:11 PM
Thanks Ivan,
I have emailed the project files.

Thanks again, Rick

 
Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.