Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Oracle |
![]() ![]() |
BuryCommoner Member Откуда: Абакан Сообщений: 175 |
Всем привет! В базе в таблице лежат данные с ключом-строкой. Как написать запрос, чтоб можно было быстро узнать каких данных не хватает в таблице, имея текстовик со списком ключей? Например, в DB2 это можно было сделать примерно так: with q (id) as (values 'id1', 'id2', ...) select id from q where id not in (select id from table1) А как сделать такое в оракле? Без использования хранимых процедур и создания дополнительных таблиц? --------------------------------------------------------- is null or not is null |
30 ноя 18, 17:24 [21750476] Ответить | Цитировать Сообщить модератору |
-2- Member Откуда: Сообщений: 14347 |
|
||
30 ноя 18, 17:36 [21750499] Ответить | Цитировать Сообщить модератору |
--Eugene-- Member Откуда: Боярышник Сообщений: 2091 |
BuryCommoner, это? with q as (select column_value id from table(sys.odcivarchar2list('id1', 'id2', 'id3'))) select * from q where q.id not in (select id from table1) |
30 ноя 18, 17:39 [21750505] Ответить | Цитировать Сообщить модератору |
Vadim Lejnin Member Откуда: Сообщений: 6543 |
1) Если файл со списом ключей доступен через объект ORACLE Directory, и возможна загрузка ключей external table (при вменяемом формате ) 2) использование with with q(id) as ( select 1 from dual union all select 2 from dual union all select 45 from dual union all select 3 from dual ) select id from q where id not in (select id from table1) ; |
||
30 ноя 18, 17:41 [21750515] Ответить | Цитировать Сообщить модератору |
BuryCommoner Member Откуда: Абакан Сообщений: 175 |
Да! Это то, что нужно. Спасибо большое, завтра попробую с компа. |
||
30 ноя 18, 18:37 [21750624] Ответить | Цитировать Сообщить модератору |
BuryCommoner Member Откуда: Абакан Сообщений: 175 |
Vadim Lejnin, спасибо за совет. Вариант с select from dual union находил, но решил поискать что-нибудь покомпактнее (чтоб меньше действий делать при предобработке текста) |
30 ноя 18, 18:39 [21750629] Ответить | Цитировать Сообщить модератору |
--Eugene-- Member Откуда: Боярышник Сообщений: 2091 |
зацените: with q as (select column_value id from table(sys.odcivarchar2list('id1', 'id2', 'id3'))) select * from q where not exists(select 1 from table1 t where t.id = q.id) |
||
30 ноя 18, 18:50 [21750646] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 17092 |
Попробуйте. Но тут есть лимит - как найдете, обязательно отпишитесь в теме. |
||
30 ноя 18, 18:51 [21750647] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 17092 |
Что именно предлагается "заценить"? |
||
30 ноя 18, 18:52 [21750649] Ответить | Цитировать Сообщить модератору |
--Eugene-- Member Откуда: Боярышник Сообщений: 2091 |
andrey_anonymous, ну (я думаю) у него по TABLE1.ID имеется индекс, который будет задействован во втором случае, а в первом (возможно) нет. ошибаюсь? |
30 ноя 18, 19:00 [21750658] Ответить | Цитировать Сообщить модератору |
-2- Member Откуда: Сообщений: 14347 |
|
||
30 ноя 18, 19:02 [21750661] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 17092 |
Как решит CBO - так и будет. И та, и другая логическая конструкция могут реализовываться оптимизатором и как анти-соединение, и как фильтр. Другой вопрос, что это не эквивалентные конструкции. |
||
30 ноя 18, 19:06 [21750666] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 17092 |
Ну блин, ведь всю интригу поломал... :) |
||
30 ноя 18, 19:07 [21750673] Ответить | Цитировать Сообщить модератору |
--Eugene-- Member Откуда: Боярышник Сообщений: 2091 |
BuryCommoner,
|
||
30 ноя 18, 19:13 [21750681] Ответить | Цитировать Сообщить модератору |
Все форумы / Oracle | ![]() |