Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.006 c
2-1246613642
Гость
2009-07-03 13:34
2009.08.30
XML Парсер


15-1246212338
vuk
2009-06-28 22:05
2009.08.30
Москва. Печать на цветном лазернике. Где?


15-1246260569
d@nger
2009-06-29 11:29
2009.08.30
Хост принудительно разрывает соединение....


15-1246004701
Индеец
2009-06-26 12:25
2009.08.30
Класс очереди с событием


15-1246470296
@!!ex
2009-07-01 21:44
2009.08.30
Сколько стоит интернет?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский