Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Сортировка в соответствии с where e_id in (.....)  [new]
wadim37
Member

Откуда:
Сообщений: 30
Добрый день.

Подскажите пож-та как оптимизировать выражение?

select e_id
from Eigenschaften
where e_id in (1, 6, 3, 124, 120, 126, 121);

Результат

E_ID
----------
1
3
6
120
121
124
126

Как можно получить результат в последовательности "in (1, 6, 3, 124, 120, 126, 121)"

Спасибо
6 ноя 16, 23:56    [19863784]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
Вадиман
Member

Откуда: Владивосток
Сообщений: 1072
Есть разница между понятиями "множество" и "кортеж".
В этом примере используется классическое "множество".
Читаем определения.
7 ноя 16, 01:15    [19863884]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10039
CASE Expressions

SY.
7 ноя 16, 02:05    [19863892]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
wadim37
Как можно получить результат в последовательности "in (1, 6, 3, 124, 120, 126, 121)"

+ Ну наверное, написав order by

так не делать. :)
order by (select min(r) from (select column_value c,rownum r from table(sys.odcinumberlist(1, 6, 3, 124, 120, 126, 121))) where e_id=c)

9 ноя 16, 12:50    [19874298]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
+ Хотя можно и попытаться обмануть судьбу
select column_value e_id
from table(sys.odcinumberlist(1, 6, 3, 124, 120, 126, 121)) 
where exists (select null from Eigenschaften where e_id=column_value)
9 ноя 16, 12:59    [19874365]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Сергей Арсеньев,

+ судьба может наказать
with Eigenschaften as
(select 1 e_id from dual
union all select 6 e_id from dual
union all select 3 e_id from dual
union all select 124 e_id from dual
union all select 120 e_id from dual
union all select 121 e_id from dual
union all select 126 e_id from dual)
select
column_value e_id
from table(sys.odcinumberlist(1, 6, 3, 124, 120, 126, 121)) t1 
where exists (select null from Eigenschaften t2 where e_id = column_value);

with Eigenschaften as
(select 1 e_id from dual
union all select 6 e_id from dual
union all select 3 e_id from dual
union all select 124 e_id from dual
union all select 120 e_id from dual
union all select 121 e_id from dual
union all select 126 e_id from dual)
select --+ use_nl(t1 t2) leading(t2 t1)
column_value e_id
from table(sys.odcinumberlist(1, 6, 3, 124, 120, 126, 121)) t1 
where exists (select null from Eigenschaften t2 where e_id = column_value);

      E_ID
----------
         1
         6
         3
       124
       120
       126
       121

7 rows selected.

      E_ID
----------
         1
         6
       120
       121
         3
       124
       126

7 rows selected.

9 ноя 16, 13:27    [19874594]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
dbms_photoshop,

Так я и говорил, про "попытаться обмануть судьбу".

Правильно, либо, как указал SY, ну или join с табличкой определяющей порядок.
Но в любом случае есть правило: нужен порядок - используй order by. :)
9 ноя 16, 15:25    [19875372]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
wadim37
Member

Откуда:
Сообщений: 30
Спасибо конечно за совет

order by

но вопрос стоит, как получить результат в последовательности "in (1, 6, 3, 124, 120, 126, 121)"
11 ноя 16, 23:47    [19885223]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
Elic
Member

Откуда:
Сообщений: 29976
wadim37
но вопрос стоит, как получить результат в последовательности "in (1, 6, 3, 124, 120, 126, 121)"
Для тех кто в танке, повторяем: Только явно сопоставив, что 6 - это второй, 3 - третий и т.д.
12 ноя 16, 00:07    [19885258]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
0.10
Guest
sys.odcinumberlist(1.0, 6.1, 3.2, 124.3, 120.4, 126.5, 121.6)
12 ноя 16, 01:21    [19885387]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10039
0.10
sys.odcinumberlist(1.0, 6.1, 3.2, 124.3, 120.4, 126.5, 121.6)


Ну и что же ты будешь дeлать когда чисел будет бoльше 10?

SY.
12 ноя 16, 04:39    [19885442]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
0.0001
Guest
SY,

Повысив значность мантиссы, можно и большее число занумеровать.
12 ноя 16, 07:57    [19885496]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
elunin
Member

Откуда:
Сообщений: 504
SELECT a.e_id
  FROM eigenschaften a
     , TABLE(t_number_table(1, 6, 3, 124, 120, 126, 121)) b
 WHERE a.e_id = b.column_value
 ORDER BY b.column_value


, где t_number_table у меня определен как
create or replace type t_number_table FORCE as TABLE OF NUMBER;
12 ноя 16, 08:22    [19885503]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
Elic
Member

Откуда:
Сообщений: 29976
elunin
     , TABLE(t_number_table(1, 6, 3, 124, 120, 126, 121)) b
 ORDER BY b.column_value
Сортировать по значению так просто ... - Но не требовалось. Учись читать внимательно.
12 ноя 16, 09:04    [19885518]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
альтернатива.
Guest
0.0001
Повысив значность мантиссы, можно и большее число занумеровать.

.9 -> 9
.01 -> 10
to_number(reverse(to_char(mod(column_value, 1))))
12 ноя 16, 10:43    [19885583]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в соответствии с where e_id in (.....)  [new]
Elic
Member

Откуда:
Сообщений: 29976
альтернатива.
reverse
Довольно опасная.
12 ноя 16, 10:48    [19885586]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить