Tom Lane wrote: > > I would like to make symmetrical(set) difference in a query. > > But the simpliest way I could find is > > > select id from a > > except > > select id from b > > union > > select id from b > > except > > select id from a > > > Is there any better solution for this problem? > > One thing you should definitely do is change "union" to "union all". > "union" implies a pass of duplicate removal, which shouldn't be > necessary here (unless a or b individually contain duplicates and > you want to get rid of those too). > > Another thing to try is > (a union b) except (a intersect b) > (Again, you might be able to say union all instead of union.) > Not sure which will be faster.
It's likely faster but my problem is I have to run queries twice. I've looked at setOp executor and it seems symmetrical differencial can run as time as an EXCEPT. I would write it, because it speeds up my query very much, but I don't know if it is worth. So, do you think a DIFFERENCE or EXCEPT SYMMETRIC clause will be reasonable feauture for postgresql? Laca ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/users-lounge/docs/faq.html