SQL: how to use UNION and order by a specific select?

后端 未结 6 2047
不思量自难忘°
不思量自难忘° 2020-12-09 16:18

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:

6条回答
  •  伪装坚强ぢ
    2020-12-09 16:55

    @Adrien's answer is not working. It gives an ORA-01791.

    The correct answer (for the question that is asked) should be:

    select id
    from 
     (SELECT id, 2 as ordered FROM a -- returns 1,4,2,3
      UNION ALL
      SELECT id, 1 as ordered FROM b -- returns 2,1
      )
    group by id
    order by min(ordered)
    

    Explanation:

    1. The "UNION ALL" is combining the 2 sets. A "UNION" is wastefull because the 2 sets could not be the same, because the ordered field is different.
    2. The "group by" is then eliminating duplicates
    3. The "order by min (ordered)" is assuring the elements of table b are first

    This solves all the cases, even when table b has more or different elements then table a

提交回复
热议问题