UNION joins two results and remove duplicates, while UNION ALL does not remove duplicates. UNION also sort the final output.
What I want is the UNION ALL without duplicates and without the sort. Is that possible?
The reason for this is that I want the result of the first query to be on top of the final result, and the second query at the bottom. (And each sorted as if they where run individually)
But the real answer is: other than the
ORDER BY
clause, the sort order will by arbitrary and not guaranteed.I assume your tables are table1 and table2 respectively, and your solution is;
The sort is used to eliminate the duplicates, and is implicit for
DISTINCT
andUNION
queries (but notUNION ALL
) - you could still specify the columns you'd prefer to order by if you need them sorted by specific columns.For example, if you wanted to sort by the result sets, you could introduce an additional column, and sort by that first:
I notice this question gets quite a lot of views so I'll first address a question you didn't ask!
Regarding the title. To achieve a "Sql Union All with “distinct”" then simply replace
UNION ALL
withUNION
. This has the effect of removing duplicates.For your specific question, given the clarification "The first query should have "priority", so duplicates should be removed from bottom" you can use
You can do something like this.
"UNION also sort the final output" - only as an implementation artifact. It is by no means guaranteed to perform the sort, and if you need a particular sort order, you should specify it with an
ORDER BY
clause. Otherwise, the output order is whatever is most convenient for the server to provide.As such, your request for a function that performs a
UNION ALL
but that removes duplicates is easy - it's calledUNION
.From your clarification, you also appear to believe that a
UNION ALL
will return all of the results from the first query before the results of the subsequent queries. This is also not guaranteed. Again, the only way to achieve a particular order is to specify it using anORDER BY
clause.