I have two selects:
SELECT id FROM a -- returns 1,4,2,3 UNION SELECT id FROM b -- returns 2,1
I'm receiving correct num of rows, like: 1,4,2,3
.
But I want b
table results first: 2,1,4,3
or 2,1,3,4
How can I do this?
(I'm using Oracle)
Union is a type of operator in MySQL. We can use ORDER BY with this to filter records. Use UNION if you want to select rows one after the other from several tables or several sets of rows from a single table all as a single result set. Let us see an example.
SQL queries initiated by using a SELECT statement support the ORDER BY clause. The result of the SELECT statement is sorted in an ascending or descending order.
You want to do this:
select * from ( SELECT id, 2 as ordered FROM a -- returns 1,4,2,3 UNION SELECT id, 1 as ordered FROM b -- returns 2,1 ) order by ordered
Update
I noticed that even though you have two different tables, you join the IDs, that means, if you have 1
in both tables, you are getting only one occurrence. If that's the desired behavior, you should stick to UNION
. If not, change to UNION ALL
.
So I also notice that if you change to the code I proposed, You would start getting both 1
and 2
(from both a
and b
). In that case, you might want to change the proposed code to:
select distinct id from ( SELECT id, 2 as ordered FROM a -- returns 1,4,2,3 UNION SELECT id, 1 as ordered FROM b -- returns 2,1 ) order by ordered
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With