Oracle UNION ALL сохранение порядка записей в запросе - PullRequest
0 голосов
/ 01 августа 2011

У меня есть следующий сценарий (таблица ниже), где я хотел бы выбрать 'X' или 'Y' в зависимости от того, являются ли они NULL или нет.

  X         Y            pick
  null     not null        Y
  not null not null        X
  not null null            X

строки, содержащие данные 'X'и' Y 'или UNION ALLed, как показано ниже:

  select 'X' as a
  union all
  select 'Y' as a

Поэтому я попытался получить следующий SQL, но не уверен насчет части "rownum <= 1".Это будет работать (для случая, когда X и Y не равны NULL) только в том случае, если UNION ALL сохранит порядок, в котором я запрашиваю две строки. </p>

  select a from 
  (
  select 'X' as a
  union all
  select 'Y' as a
  ) where a is not null and rownum<=1;

  select a from 
  (
  select null as a
  union all
  select 'Y' as a
  ) where a is not null and rownum<=1;

  select a from 
  (
  select 'X' as a
  union all
  select null as a
  ) where a is not null and rownum<=1;

Является ли вышеуказанный правильный способ решить эту проблему?,Любое понимание будет высоко ценится

Ответы [ 2 ]

1 голос
/ 01 августа 2011
0 голосов
/ 01 августа 2011

Если вы хотите определенный порядок в SQL, вы должны запросить его. Вы могли бы, вероятно, расширить свой союз как:

  select a from (
    select a,rownum as rn from 
    (
       select 'X' as a, 0 as Priority from dual
       union all
       select 'Y' as a, 1 as Priority from dual
    ) where a is not null order by Priority
  ) where rn = 1

Хотя я признаю, что не очень хорош в Oracle Я считаю, что rownum делает странные вещи в предложениях WHERE, поэтому я ввел дополнительный уровень запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...