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

Откуда:
Сообщений: 1755
есть 2 таблички равного числа строк

create table VmiA as
select rownum+91187 as id, 0 as Fld from dual connect by level < 1001

create table VmiB as
select rownum+71112 as id from dual connect by level < 1001

нужно проапдейтить поле VmiA.Fld полем VmiB.id "cтрока в сторку"
т.е 1-я строка VmiA.Fld содержит id из 1-й строки VmiB и т.д.

Бeз PL/SQL и перформантно плиз! ))))


____________________________________________________________
сейчас работаю на: Oracle 10.2.0.3.0, 64bit, standard edition, SLES-10
6 фев 09, 15:35    [6789234]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
ORAngutang
..т.е 1-я строка ..

я прочитал три раза.. так и не понял - первая - от какого края?
6 фев 09, 15:40    [6789273]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
Жареный петух
Guest
>>т.е 1-я строка VmiA.Fld содержит id из 1-й строки VmiB и т.д

Что такое 1-я строка в VmiA ?
Что такое 1-я строка в VmiB ?
Что такое 2-я строка в VmiA ?
Что такое 2-я строка в VmiB ?
...
etcetra

P.S. Ей-богу, если не придумать что-нибудь такое, чтобы автоматически било током
любого при попытке применить навигационный подход к реляционной модели,
эта музыка будет вечной...
6 фев 09, 15:42    [6789284]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
Zloxa
Member

Откуда: СССР ☭
Сообщений: 1033
merge into VmiA
  using (
    select a.id aid, b.id bid
    from 
      (select row_number() over (order by id) rn, id from VmiA) a
      ,(select row_number() over (order by id) rn, id from VmiB) b
    where a.rn = b.rn
  )
 on (aid = id)
when matched then update set fld = bid
6 фев 09, 15:47    [6789312]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
MazoHist
Guest
update  vmia t 
set t.fld = (select b.id from 
(select vmia.id, row_number() over (order by id) rn from vmia) a,
(select id, row_number() over (order by id) rn from vmib) b
where a.rn = b.rn and t.id = a.id)  
6 фев 09, 15:50    [6789343]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
orawish
ORAngutang
..т.е 1-я строка ..

я прочитал три раза.. так и не понял - первая - от какого края?


тут "вроде как" вариант только один возможен: та что с минимальным id! ;-)
6 фев 09, 15:51    [6789352]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
Zloxa
merge into VmiA
  using (
    select a.id aid, b.id bid
    from 
      (select row_number() over (order by id) rn, id from VmiA) a
      ,(select row_number() over (order by id) rn, id from VmiB) b
    where a.rn = b.rn
  )
 on (aid = id)
when matched then update set fld = bid


огромное спасибо!
6 фев 09, 15:52    [6789357]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
MazoHist
update  vmia t 
set t.fld = (select b.id from 
(select vmia.id, row_number() over (order by id) rn from vmia) a,
(select id, row_number() over (order by id) rn from vmib) b
where a.rn = b.rn and t.id = a.id)  


элегантно! Но меrge-вариантик у меня заметно быстре идет!
6 фев 09, 15:56    [6789388]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
ORAngutang
orawish
ORAngutang
..т.е 1-я строка ..

я прочитал три раза.. так и не понял - первая - от какого края?


тут "вроде как" вариант только один возможен: та что с минимальным id! ;-)

ну, слава Богу, (обошлось без тока :)
6 фев 09, 15:57    [6789400]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
MazoHist
Guest
>элегантно! Но меrge-вариантик у меня заметно быстре идет!
Не все еще перешли на 10g...
6 фев 09, 16:17    [6789537]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
MazoHist
>элегантно! Но меrge-вариантик у меня заметно быстре идет!
Не все еще перешли на 10g...


cогласен. Не все. Я так лично это дело уже на dev-базе 11g тестирую! :-))))
6 фев 09, 17:45    [6790073]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
Добрый Э - Эх
Guest
MazoHist
>элегантно! Но меrge-вариантик у меня заметно быстре идет!
Не все еще перешли на 10g...
ORAngutang
cогласен. Не все.

Парни вы о чем?!?!?!
Если что, то MERGE доступен с версии 9i...
7 фев 09, 12:07    [6791510]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
читатель_доки
Guest
Добрый Э - Эх

Парни вы о чем?!?!?!
Если что, то MERGE доступен с версии 9i...

Думаю, что имеется в виду:
http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/wnsql.htm#sthref11 Oracle® Database SQL Reference
10g Release 1 (10.1)
Part Number B10759-01



MERGE has new syntax that lets you:

* Specify either the update operation or the insert operation, or both
7 фев 09, 14:28    [6791694]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
Добрый Э - Эх
Guest
читатель_доки
Думаю, что имеется в виду:
http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/wnsql.htm#sthref11 Oracle® Database SQL Reference
10g Release 1 (10.1)
Part Number B10759-01



MERGE has new syntax that lets you:

* Specify either the update operation or the insert operation, or both

Прямыми руками (правда через анус) такой функционал MERGE и в 9-ке реализуется без проблем...
7 фев 09, 14:47    [6791727]     Ответить | Цитировать Сообщить модератору
 Re: маленькая SQL задачка (её корни из суровой практики)  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
Прямыми руками (правда через анус) такой функционал MERGE и в 9-ке реализуется без проблем...

Как пример такого рода реализации: тынц
7 фев 09, 14:54    [6791741]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить