Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Избавиться от записей null, Записи null 
:(
    Опции темы
KAV2008
Дата 9.1.2012, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Подскажите  как доработать запрос (часть запроса) , что бы не было записей c null  (ora 9i) 
ps  inner join - не можем использовать из-за логики основного запроса
Код

with table1 as( 
    select  '/ius/Main.aspx' url, NULL query_string  from dual
    union  all
    select  '/ius/Main.aspx' url, NULL query_string from dual
    union  all
    select  '/ius/PageForFrame.aspx' url,  'src=http://17.28.8.13/state_units.html' query_string from dual
    union  all
    select  '/ius/PassportOfHeat.aspx' url,  NULL query_string from dual
),
    table2 as 
 
 ( select  47 id_menu, 'PageForFrame.aspx' link_menu,  1 state_id, 'http://17.28.8.13/state_units.html' src from dual
   union  all
   select 112 id_menu ,'Main.aspx' link_menu, 1 state_id, NULL src  from dual
  )
select id_menu,
            case when id_menu is null then 'null' else 'not null' end dd
    from table1 
    left join table2 on upper(substr(url, instr(url, '/', 1,2)+1,length(url)-instr(url, '/', 1,2)+1+1))=upper(link_menu)
                      and (upper(substr(query_string, 5, length(query_string)-5+1))= upper(src)
                       or (src is null and query_string is null)) 
    and table2.state_id=1    
    where  id_menu is not  null;


Полученный результат
112 not null
112 not null
47 not null
       null

Необходимый результат
112 not null
112 not null
47 not null

Спасибо

PM MAIL   Вверх
Zloxa
Дата 9.1.2012, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(KAV2008 @  9.1.2012,  12:27 Найти цитируемый пост)
 inner join - не можем использовать из-за логики основного запроса

Предикат "where  id_menu is not  null" отсекает те записи, которые вернулись бы левым соединением и делает результат эквивалентным внутреннему соединению.

Цитата(KAV2008 @  9.1.2012,  12:27 Найти цитируемый пост)
Полученный результат

 smile 
Код

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 
SQL> with table1 as(
  2      select  '/ius/Main.aspx' url, NULL query_string  from dual
  3      union  all
  4      select  '/ius/Main.aspx' url, NULL query_string from dual
  5      union  all
  6      select  '/ius/PageForFrame.aspx' url,  'src=http://17.28.8.13/state_units.html' query_string from dual
  7      union  all
  8      select  '/ius/PassportOfHeat.aspx' url,  NULL query_string from dual
  9  ),
 10      table2 as
 11   ( select  47 id_menu, 'PageForFrame.aspx' link_menu,  1 state_id, 'http://17.28.8.13/state_units.html' src from dual
 12     union  all
 13     select 112 id_menu ,'Main.aspx' link_menu, 1 state_id, NULL src  from dual
 14    )
 15  select id_menu,
 16              case when id_menu is null then 'null' else 'not null' end dd
 17      from table1
 18      left join table2 on upper(substr(url, instr(url, '/', 1,2)+1,length(url)-instr(url, '/', 1,2)+1+1))=upper(link_menu)
 19                        and (upper(substr(query_string, 5, length(query_string)-5+1))= upper(src)
 20                         or (src is null and query_string is null))
 21      and table2.state_id=1
 22      where  id_menu is not  null;
 
   ID_MENU DD
---------- --------
       112 not null
       112 not null
        47 not null
 
SQL> 

Похоже на баг.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
KAV2008
Дата 9.1.2012, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Что нибудь можно сделать ?
PM MAIL   Вверх
Zloxa
Дата 9.1.2012, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(KAV2008 @  9.1.2012,  13:38 Найти цитируемый пост)
Что нибудь можно сделать ? 

Что нибудь - да
1) Патчиться.
2) Найти на металинке воркэраунд.
3) Найти воркэраунд самостоятельно.

Полагаю третий случай, что ни на есть - ваш. Полагаю кляузу with и select from dual вы использовали только лишь эксперимента ради, если вместо вычитки из дуал вы подставите настоящие таблицы, думаю, результат окажется правильным. Еще, думаю, может помочь добавление предиката where rownum > 0 внутри with подзапроса. Можно попытаться переписать запрос на старый синтакси джойна, он в значительной степени более стабилен нежели ansi синтаксис.
В общем - бубен в руки, активизировать фантазию и.. - в пляс.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
KAV2008
Дата 10.1.2012, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



with и select from dual     использовали для наглядности вопроса
на реальных таблицах - результат аналогичный ( с нулевыми записями)
Будем экспериментировать с запросом 
Спасибо

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0695 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.