В Oracle есть таблица со столбцами:
id | start_number | end_number
---+--------------+------------
1 | 100 | 200
2 | 151 | 200
3 | 25 | 49
4 | 98 | 99
5 | 49 | 100
Существует список чисел (50, 99, 150).
Я хочу SQL-оператор, который возвращает всеидентификаторы, где любое из чисел в списке номеров найдено равным или между start_number и end_number.
Используя приведенный выше пример;1, 4 и 5 должны быть возвращены.
1 - 150 находится между или равен 100 и 200
2 - ни одно из чисел не находится между или равно 151 и 200
3 - ни одно из номеровмежду или равными 25 и 49
4 - 99 между или равными 98 и 99
5 - 50 и 99 между или равными 49 и 100
drop table TEMP_TABLE;
create table TEMP_TABLE(
THE_ID number,
THE_START number,
THE_END number
);
insert into TEMP_TABLE(THE_ID, THE_START, THE_END) values (1, 100, 200);
insert into TEMP_TABLE(THE_ID, THE_START, THE_END) values (2, 151, 200);
insert into TEMP_TABLE(THE_ID, THE_START, THE_END) values (3, 25, 49);
insert into TEMP_TABLE(THE_ID, THE_START, THE_END) values (4, 98, 99);
insert into TEMP_TABLE(the_id, the_start, the_end) values (5, 49, 100);
Ниже приводитсяРешение, которое я придумал, основываясь на комментариях и ответах ниже, плюс некоторые дополнительные исследования:
SELECT
*
from
TEMP_TABLE
where
EXISTS (select * from(
select column_value as id
from table(SYS.DBMS_DEBUG_VC2COLL(50,99,150))
)
where id
BETWEEN TEMP_TABLE.the_start AND TEMP_TABLE.the_end
)
Это тоже работает:
SELECT
*
from
TEMP_TABLE
where
EXISTS (select * from(
select column_value as id
from table(sys.ku$_vcnt(50,99,150))
)
where id
BETWEEN TEMP_TABLE.the_start AND TEMP_TABLE.the_end
)