Форум: "Прочее";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];
ВнизПомогите с 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c