# [xquery-talk] Incorrect Intersect and Except Output?

Michael Kay mike at saxonica.com
Mon Mar 31 07:23:24 PST 2008

```No, you haven't grasped it.

let \$a1 := <a/>, \$a2 := <a/> return count((\$a1, \$a2))

returns 2. Thats because the two <a/> nodes are DIFFERENT - they have
different identity because they were created separately. The same logic
applies to intersect and except.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: talk-bounces at x-query.com
> [mailto:talk-bounces at x-query.com] On Behalf Of Wei, Alice J.
> Sent: 31 March 2008 00:09
> To: Jonathan Robie
> Cc: talk at x-query.com
> Subject: RE: [xquery-talk] Incorrect Intersect and Except Output?
>
> Hi, Jonathan:
>
>   I think I understand what you mean by having different
> nodes in the both sets I have indicated. However, since
> <b>2</b><b>3</b> are co-shared between the two sets, this
> means that I have to go around by doing something like
>
> let \$a := <a><b>1</b><b>2</b><b>3</b></a>, \$b :=
> <c><b>What</b><b>2</b><b>3</b><b>4</b></c>
> return
> <foo>{((\$a/b union \$b/b) except (\$a/b except \$b/b))}</foo>
>
> Output:
>
> <foo>
> <b>What</b>
> <b>2</b>
> <b>3</b>
> <b>4</b>
> </foo>
>
> This is not exactly what I desired, but are you saying that I
> have to use union joins and combine it with other operators
> for the output? And, how can I get rid of the
> <b>2</b><b>3</b> and switch it with <b>1</b>?
>
>
> Alice
> ======================================================
> Alice Wei
> MIS 2008
> School of Library and Information Science Indiana University
> Bloomington ajwei at indiana.edu ________________________________________
> From: Jonathan Robie [jonathan.robie at redhat.com]
> Sent: Sunday, March 30, 2008 1:45 PM
> To: Wei, Alice J.
> Cc: talk at x-query.com
> Subject: Re: [xquery-talk] Incorrect Intersect and Except Output?
>
> Wei, Alice J. wrote:
> > let \$a := <a><b>1</b><b>2</b><b>3</b></a>, \$b :=
> > <c><b>What</b><b>2</b><b>3</b><b>4</b></c>,
> > return
> > <foo>{\$a except \$b}</foo>
> >
> > brings
> >
> > <foo>
> > <a>
> > <b>1</b>
> > <b>2</b>
> > <b>3</b>
> > </a>
> > </foo>
> >
>
> Except tests for node identity (you seem to expect it to test
> the node values). If none of the nodes in \$a are also in \$b,
> then \$a except \$b is the same as \$a.
>
> > If I use \$a intersect \$b, it brings me an empty node <foo/> Isn't
> > intersect supposed to bring back what is contained in \$b and \$a?
> >
>
> Yes, but there are no nodes in \$b that are also in \$a, and vice versa.
>
> Jonathan
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk

```