Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помогите с селектом  [new]
НИКПИК
Guest
Имеется две таблицы a, b.
В таблице a имеется поле p длиной 20 символов.
В таблице b имеется два поля p1 и p2 длиной по 20 символов.
Если первых 5 символов из a.p равны первым 5 символам из b.p1 (substr(a.p,1,5) = substr(b.p1,1,5)) , то отобразить поле b.p2 - если оно не NULL, иначе поле a.p
22 сен 06, 17:17    [3174384]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
jjj32
Guest
типа того?
select nvl(b.p2,a.p )
from a,b
where (substr(a.p,1,5) = substr(b.p1,1,5)) 
22 сен 06, 17:21    [3174410]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
НИКПИК
Guest
Вроде этого.
22 сен 06, 17:22    [3174423]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
НИКПИК
Guest
Только вот дождаться результата не могу.
При сравнение по полному полю - селект выкатывается за 6 секунд.
select nvl(b.p2,a.p )
from a,b
where a.p = b.p

А вот для такого селекта

select nvl(b.p2,a.p )
from a,b
where (substr(a.p,1,5) = substr(b.p1,1,5))

сидел минут 5 - результата не дождался
22 сен 06, 17:28    [3174461]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
jjj32
Guest
смею предположить: минус индексы...
22 сен 06, 17:30    [3174483]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
Wireless
Member

Откуда: 660030 -> 80303
Сообщений: 554
Используй функциональный индекс. Либо если часто такой запрос - даже материализованное представление.
22 сен 06, 17:30    [3174488]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
jjj32
Guest
сдается мне, вряд ли запрос частый... слишком уж мутное условие объединения...
22 сен 06, 17:33    [3174515]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
contr
Member

Откуда:
Сообщений: 1909
НИКПИК
А вот для такого селекта
select nvl(b.p2,a.p )
from a,b
where (substr(a.p,1,5) = substr(b.p1,1,5))

сидел минут 5 - результата не дождался


Попробуйте два варианта:

select nvl(b.p2,a.p )
from a,b
where a.p like substr(b.p1,1,5)||'%'

и

select nvl(b.p2,a.p )
from a,b
where b.p1 like substr(a.p,1,5)||'%'
22 сен 06, 17:34    [3174526]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
stax.
Guest
SQL> select * from a;

       ID P
--------- --------------------
        1 12345678
        2 asdfghjk

SQL> select * from b;

   ID_REF P1                   P2
--------- -------------------- --------------------
        1 12345qwer            SSS
        1 12345qwer
        2 sdfghjk              WWW
        2 QWERTTYUIIOO

SQL> select
  2    a.id
  3   ,decode(substr(p,1,5),substr(p1,1,5),nvl(p2,p),p) ppp
  4  from
  5    a
  6   ,b
  7  where
  8    a.id=b.id_ref
  9  /

       ID PPP
--------- --------------------
        1 SSS
        1 12345678
        2 asdfghjk
        2 asdfghjk

SQL> 
.....
stax
22 сен 06, 18:38    [3174935]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18343
stax.

Стас, какие ID? О чем это все?
22 сен 06, 18:40    [3174946]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116139
stax.


Судя по описанию таблиц, у автора нет никакой другой возможности
объединения, кроме как по substr.
22 сен 06, 18:42    [3174966]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
Stax.
Guest
andrey_anonymous
stax.

Стас, какие ID? О чем это все?

об уточнении условий задачи

какой результат нужен для строк с
с p1='12345qwer '?

.....
stax
22 сен 06, 18:49    [3174996]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить