Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление нескольких записей данными из другой таблицы. / 11 сообщений из 11, страница 1 из 1
22.01.2019, 12:35
    #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
22.01.2019, 12:42
    #39762741
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление нескольких записей данными из другой таблицы.
Chukis,

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

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

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


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

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

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

tomato из russia дороже

....
stax
...
Рейтинг: 0 / 0
23.01.2019, 12:57
    #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
23.01.2019, 13:24
    #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
23.01.2019, 13:45
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление нескольких записей данными из другой таблицы. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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