Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.30;
Скачать: CL | DM;

Вниз

Помогите с SQL   Найти похожие ветки 

 
Лев   (2009-07-02 10:14) [0]

Здравствуйте, помогите написать скрипт. Задача такова, к примеру есть 2 таблицы Test1 и Test2 (по структуре одинаковые).
Поля: ID, PO, BN, RN.
В Test1 (Все поля заполненные), В Test2 (Все кроме RN)
Необходимо проАпдейтить поле RN таблицы Test2, связав таблицы по полям PO и BN.

Сам запрос я смог сделать, а вот как теперь проАпдейтить RN не знаю.

select t2.* from test1 t1, test2 t2 where (t1.bn = t2.bn) and (t1.po = t2.po)


 
palva ©   (2009-07-02 10:34) [1]

Стандартных средств по-моему, нет. Но если вы укажете сервер, для которого пишете, то можно будет обсудить.


 
Skyle ©   (2009-07-02 10:47) [2]

Предположу

UPDATE T2
SET RN = T1.RN
FROM Test1 T1
 INNER JOIN Test2 T2 ON T2.PO = T1.PO AND T2.BN = T1.BN


 
sniknik ©   (2009-07-02 10:48) [3]

стандартное средство есть, это sql команда update ...  вот только ee синтаксис может быть разный.


 
Лев   (2009-07-02 11:02) [4]


> Стандартных средств по-моему, нет. Но если вы укажете сервер,
>  для которого пишете, то можно будет обсудить.


Оракл 10g.


> Skyle ©   (02.07.09 10:47) [2]


Спасибо, сейчас попробую.


 
Лев   (2009-07-02 11:04) [5]


> UPDATE T2
> SET RN = T1.RN
> FROM Test1 T1
>  INNER JOIN Test2 T2 ON T2.PO = T1.PO AND T2.BN = T1.BN


"Неверное завершение SQL предложения" :( Подскажите пожалуйста другой вариант.


 
Sergey13 ©   (2009-07-02 11:16) [6]

> [5] Лев   (02.07.09 11:04)
> Подскажите пожалуйста другой вариант.

попробуй

UPDATE T2
SET RN = (select max(T1.RN)FROM Test1 T1 where T2.PO = T1.PO AND T2.BN = T1.BN)

но это наверное будет долговато на больших объемах.

ЗЫ: Это разовая операция? Какой смысл в двух одинаковых таблицах?


 
Лев   (2009-07-02 12:35) [7]


> Sergey13 ©   (02.07.09 11:16) [6]


Немного подправил, но все отлично работает, спасибо.

На самом деле она будет выполнятся часто, в первой таблице будет, что-то вроде статуса, проапдейтенные записи будут метиться. Думаю этот вариант будет по быстрее чем мой вариант в дельфи, пробежкой While по первой таблице, и передачей ID-шников для апдейта второй таблицы.


 
Skyle ©   (2009-07-02 12:41) [8]


> Лев   (02.07.09 12:35) [7]

На будущее рекомендую прислушаться к [1] и всё-таки указывать сервер БД. Код из [2], например, работает в MS SQL.


 
Лев   (2009-07-02 12:48) [9]


> На будущее рекомендую прислушаться к [1] и всё-таки указывать
> сервер БД. Код из [2], например, работает в MS SQL.


Да, в голове крутилось, что нужно указать, но забыл пока придумал как описать задачу подробнее.


 
Sergey13 ©   (2009-07-02 13:01) [10]

> [7] Лев   (02.07.09 12:35)
> На самом деле она будет выполнятся часто

Тогда еще настойчивей встает вопрос о целесообразности двух таблиц с одинаковой структурой. Проще и правильнее, ИМХО, приделать пару-тройку атрибутов к одной.


 
sniknik ©   (2009-07-02 13:02) [11]

> например, работает в MS SQL.
в оракле тоже должно быть что то похожее (с объединением, а не под запросом как [6]), и советую разобраться именно с таким вариантом, раз нужно для частого выполнения, он обычно быстрее.


 
ANB   (2009-07-02 13:03) [12]

Если обьем маленький - то пойдет 6.

Если большой, то :

create table Test2_Copy as select /*+ full(T2) parallel(T2, 16) */ T2.* from Test2 T2
/
truncate table Test2
/
insert into Test2
(ID, PO, BN, RN)
select
 /*+ full(T1) parallel(T1, 4) full(T2) parallel(T2, 4) use_hash(T1, T2) */
 ID, PO, BN, RN
from
 Test2_Copy T2
,Test1 T1
where
 (t1.bn = t2.bn) and (t1.po = t2.po)
/
commit
/

Степень распараллеливания подрегулировать.


 
Лев   (2009-07-02 13:14) [13]

Таблицы Тест1 и Тест2, это лишь для того что бы мне было легче объяснить суть задачи, на самом деле данные в таблицах будут не всегда одинаковы, и только пара полей сходятся у этих таблиц, а так полей у обоих очень много.


 
Sergey13 ©   (2009-07-02 13:16) [14]

> [13] Лев   (02.07.09 13:14)
> это лишь для того что бы мне было легче объяснить суть задачи

Тогда это "совпадение структур" вообще не влияет ни на запрос ни на вопрос. Только путаницу вносит.


 
Anatoly Podgoretsky ©   (2009-07-02 13:23) [15]

> Лев  (02.07.2009 13:14:13)  [13]

Короче тебе надо занять постановкой и нормализацией до третей формы


 
Игорь Шевченко ©   (2009-07-02 13:23) [16]


> Необходимо проАпдейтить поле RN таблицы Test2, связав таблицы
> по полям PO и BN.


если по сочетанию PO и BN в Test1 будет ВСЕГДА одна запись


 
ANB   (2009-07-02 15:23) [17]


> Лев   (02.07.09 13:14) [13]

Тогда 12. Там твори чего хочешь.



Страницы: 1 вся ветка

Текущий архив: 2009.08.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
2-1246133770
aligator2008
2009-06-28 00:16
2009.08.30
richedit


15-1245862036
Nic
2009-06-24 20:47
2009.08.30
Открывается ли сайт


15-1246084442
Student85236
2009-06-27 10:34
2009.08.30
Как жестко перегрузить Windows XP


15-1246344627
Виктор85
2009-06-30 10:50
2009.08.30
Посоветуйте хостинг для WebBroker приложения


15-1246451106
@!!ex
2009-07-01 16:25
2009.08.30
ЗИЛ в Германии 45 года????