powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление нескольких записей данными из другой таблицы.
11 сообщений из 11, страница 1 из 1
Обновление нескольких записей данными из другой таблицы.
    #39762735
Chukis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, каким образом обновит через UPDATE сразу несколько реквизитов в нескольких строках значениями из подзапроса к другой таблице? Таблицы между собой связываются по id.
Например,
Table 1
idtovar country price1 tomato russia1 tomato romania2 cucumber russia

Table2
iddatas price1 10.10.2018 50.11 11.10.2018 49.92 10.10.2018 10

Надо цену перенести в первую таблицу исходя из цены и id.
...
Рейтинг: 0 / 0
Обновление нескольких записей данными из другой таблицы.
    #39762741
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chukis,

и как во второй таблице вы понимаете: какая цена от томато Россия, а какая - от томато Романия ?
...
Рейтинг: 0 / 0
Обновление нескольких записей данными из другой таблицы.
    #39762742
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chukis,

но, отвечая на ваш вопрос:
1) UPDATABLE View на базе JOIN-а таблиц
2) DML-оператор MERGE
...
Рейтинг: 0 / 0
Обновление нескольких записей данными из другой таблицы.
    #39762764
Chukis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Анна,

по id совпадают товары.


Я пробовал через merge using, но не работает
...
Рейтинг: 0 / 0
Обновление нескольких записей данными из другой таблицы.
    #39762776
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chukisпо id совпадают товары.у вас у обоих томатов в первой таблице ID равен единицы. Получается, если по ID джойнить, то к каждому из томатов первой таблице вы подтяните обе цены из второй...
...
Рейтинг: 0 / 0
Обновление нескольких записей данными из другой таблицы.
    #39762778
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChukisЯ пробовал через merge using, но не работаетсвои вариант, конечно же, никому не показывайте. а главное - ни при каких условиях не сообщайте подробности того, что вы вкладываете в понятие "не работает"
...
Рейтинг: 0 / 0
Обновление нескольких записей данными из другой таблицы.
    #39762831
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chukis,

по какому правилу должно обновиться поле price из первой таблицы?
...
Рейтинг: 0 / 0
Обновление нескольких записей данными из другой таблицы.
    #39762916
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_DeminChukis,

по какому правилу должно обновиться поле price из первой таблицы?

tomato из russia дороже

....
stax
...
Рейтинг: 0 / 0
Обновление нескольких записей данными из другой таблицы.
    #39763371
Chukis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_Demin,
Извиняюсь за неполную таблицу. Вот такие должны быть

Table 1
idtovardatas_partiacountryprice1tomato10.10.2018russia 1tomato11.10.2018romania 2cucumber10.10.2018russia

Table2
iddatasprice110.10.201850.1111.10.201849.9210.10.201810

Таблицы связваются по ID и по Датам - datas и datas_partia
...
Рейтинг: 0 / 0
Обновление нескольких записей данными из другой таблицы.
    #39763407
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chukis,

Вот,

Код: plsql
1.
2.
UPDATE t1
SET t1.price = (SELECT t2.price FROM t2 WHERE t1.id = t2.id AND t1.datas_partia = t2.datas)
...
Рейтинг: 0 / 0
Обновление нескольких записей данными из другой таблицы.
    #39763436
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_DeminВот
Код: plsql
1.
2.
UPDATE t1
SET t1.price = (SELECT t2.price FROM t2 WHERE t1.id = t2.id AND t1.datas_partia = t2.datas)


Это опасный код.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
create table dropme_t(id, val)
as select rownum, 'исходное значение '||rownum
     from dual connect by level < 4;
Table created

create table dropme_t2 (id, val)
as select rownum*2, 'новое значение '||(rownum*2)
     from dual connect by level < 2;
Table created

select * from dropme_t;
        ID VAL
---------- ----------------------------------------------------------
         1 исходное значение 1
         2 исходное значение 2
         3 исходное значение 3

update dropme_t t
   set val = (select val from dropme_t2 t2 where t.id=t2.id);
3 rows updated

select * from dropme_t;
        ID VAL
---------- ----------------------------------------------------------
         1 
         2 новое значение 2
         3 

rollback;
Rollback complete

-- как правильно:

update dropme_t t
   set val = (select val from dropme_t2 t2 where t.id=t2.id)
 where exists(select null from dropme_t2 t2 where t.id=t2.id)
   ;
1 row updated

select * from dropme_t;
        ID VAL
---------- ----------------------------------------------------------
         1 исходное значение 1
         2 новое значение 2
         3 исходное значение 3


rollback;
Rollback complete

-- Как лучше:

merge into dropme_t t
      using (select * from dropme_t2) t2
      on (t.id = t2.id)
when matched
  then update set t.val = t2.val
;

1 row merged

select * from dropme_t;
        ID VAL
---------- ----------------------------------------------------------
         1 исходное значение 1
         2 новое значение 2
         3 исходное значение 3

rollback;
Rollback complete

-- Что еще можно сделать:

alter table dropme_t2
  add constraint dropme_t2$pk
      primary key(id);
Table altered

update(
  select t.val, t2.val newval
    from dropme_t t, dropme_t2 t2
   where t.id=t2.id
) set val = newval;
1 row updated

select * from dropme_t;
        ID VAL
---------- ----------------------------------------------------------
         1 исходное значение 1
         2 новое значение 2
         3 исходное значение 3

SQL> 
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление нескольких записей данными из другой таблицы.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]