Обсуждение: set difference
Hello, 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? Thanks Laca
Domoszlai László <dlacko@finit.hu> writes: > 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. regards, tom lane
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 DIFFERENCEor EXCEPT SYMMETRIC clause will be reasonable feauture for postgresql? Laca
Domoszlai László <dlacko@finit.hu> writes: > So, do you think a DIFFERENCE or EXCEPT SYMMETRIC clause will be reasonable > feauture for postgresql? I doubt it; haven't heard a request for it before, and AFAICS there's no such thing in the SQL spec... regards, tom lane