SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.11.2011 10:45:53

EvgenOrel
Участник
Зарегистрирован: 07.11.2011
Сообщений: 3

UPDATE из SELECT c вычислением

Доброго времени суток.
Есть две таблицы t1 и t2
t1 :id_t1 , sum_val
t2 :id_t2 , val, id_t1

Как в поле t1.sum_val поместить сумму по полю t2.val соединяя через id_t1 и выбирая их по определенному условию одним запросом?

В mssql это можно сделать например так


UPDATE t1
SET sum_val=tt.sumval
FROM
t1 inner join
(SELECT t1.id,SUM(t2.val) as sumval
FROM t1 inner join t2 on t1.id=t2.id
GROUP BY t1.`id`
HAVING t1.sum_val<>SUM(t2.val)) tt on t1.id=tt.id
 

есть что-нибудь подобное в mysql?

Отредактированно EvgenOrel (07.11.2011 10:46:38)

Неактивен

 

#2 07.11.2011 12:16:44

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: UPDATE из SELECT c вычислением

UPDATE t1 t1_ SET sum_val = ( SELECT sum(sum_val) FROM t2 WHERE id_t1=t1_.id_t1 );
?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 07.11.2011 12:45:37

EvgenOrel
Участник
Зарегистрирован: 07.11.2011
Сообщений: 3

Re: UPDATE из SELECT c вычислением

Спасибо, так срабатывает.
Как быть с условием :

HAVING t1.sum_val<>SUM(t2.val))
?
Чтобы обрабатывать не все записи, а только те по которым были изменения ?

Неактивен

 

#4 07.11.2011 12:48:20

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: UPDATE из SELECT c вычислением

Я не уверен, что это будет сильно лучше, чем предыдущий вариант.

UPDATE t1 t1_ SET sum_val = ( SELECT sum(sum_val) FROM t2 WHERE id_t1=t1_.id_t1 ) WHERE ( t1_.sum_val<>( SELECT sum(sum_val) FROM t2 WHERE id_t1=t1_.id_t1 ) )


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 07.11.2011 13:04:30

EvgenOrel
Участник
Зарегистрирован: 07.11.2011
Сообщений: 3

Re: UPDATE из SELECT c вычислением

Спасибо, выходит где то в 7 раз быстрее, хотя читается намного хуже.

Неактивен

 

#6 07.11.2011 13:22:56

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: UPDATE из SELECT c вычислением

Аж в 7 раз?.. Видимо мало где изменение значения проводилось smile.
А насчет читаемости - может быть и можно покороче, но я не знаю как. Попытался с алиасом, но MySQL не пропускает мой вариант.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson