Hi,
I wish to know concept of joins(natural join) in MarkLogic. I am
fetching records from 3 files. The files are having following structure
*First File.xml*
*<Result>*
*<Details><Name>Ashish</Name><Age>25</Age></Details>*
*<Details><Name>Sachin</Name><Age>23</Age></Details>*
*</Result>*
*Second File.xml*
*<Result>*
*<Details><Name>Ashish</Name><Age>25</Age></Details>*
*<Details><Name>Sachin</Name><Age>23</Age></Details>*
*<Details><Name>Mohan</Name><Age>26</Age></Details>*
*<Details><Name>Parth</Name><Age>27</Age></Details>*
*</Result>*
*Third File.xml*
*<Result>*
*<Details><Name>Ashish</Name><Age>25</Age></Details>*
*<Details><Name>Sachin</Name><Age>23</Age></Details>*
*<Details><Name>Neha</Name><Age>14</Age></Details>*
*</Result>*
I want to fetch common records from all three files. Currently I am
fetching values of *<s>* using *cts:element-values,* storing it in map and
comparing 2 maps using following code:
*declare* *function* local:intersection($a *as* xs:string*,$b *as*
xs:string*) *as* xs:string*
{
*let* $desig-map := map:map()
*let* $temp-map := map:map()
*let* $sachin:=map:map()
*let* $m1:=*for* $i *in* $a
*return* map:put($desig-map, $i, "a")
*let* $m2:=*for* $j *in* $b
*return* map:put($temp-map, $j, "a")
*let* $q:= ($desig-map)-($temp-map)
*let* $r:=($temp-map)-($desig-map)
*let* $total:=($temp-map)+ ($desig-map)
*let* $final:=($total - ($q + $r))
*return* map:keys($final)
};
The current implementation of fetching common records is time consuming as
it keeps on comparing all 3 values. I want to know the fastest and best
approach to fetch common records from multiples files.
Regards
Sachin Sharma
_______________________________________________
General mailing list
[email protected]
Manage your subscription at:
http://developer.marklogic.com/mailman/listinfo/general