MySQL update min(), max() из другой таблицы

12 3
izbushka
На сайте с 08.06.2007
Offline
110
2310

Есть две таблицы:

t1: id, min_price, max_price

t2: id, price

Нужно заполнить поля min_price и max_price таблицы 1 минимальным и максимальным значением поля price второй таблицы.

Пока придумал только двумя запросами: для min и max:

update t1 set min_price=(select min(price) from t2 where id=t1.item_id)
update t1 set max_price=(select max(price) from t2 where id=t1.item_id)

Возможно ли это сделать одним запросом? Ну, то есть, понятно, что можно сделать 2 вложенных запроса, но это так же долго, как и эти 2 по очереди. Хочется делать только 1 select min(price), max(price) from t2

siv1987
На сайте с 02.04.2009
Offline
427
#1
izbushka
На сайте с 08.06.2007
Offline
110
#2

C select'ом пробем нет. Проблема с update. Я могу достать 2 поля одним запросом, но как их скормить update'у?

siv1987
На сайте с 02.04.2009
Offline
427
#3

update поддерживает join-ы. делаете подзапросом и обедняете с обновляемой таблицы. Хотя, имхо, не вижу здесь причины так сильно извращаться в одном запросе.

IL
На сайте с 20.04.2007
Offline
435
#4

izbushka-izbushka, а чего Ваш update без id работает? Он ведь все строки обновит.


REPLACE INTO t1
SELECT id, min(price), max(price) FROM t2 WHERE id=555
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
siv1987
На сайте с 02.04.2009
Offline
427
#5

ivan-lev, не факт что нужно обновить какой-то конкретный id, а не все записи в таблице. При этом там видимо есть какая-то связь с первой таблицы %t1%_id

IL
На сайте с 20.04.2007
Offline
435
#6
siv1987:
что нужно обновить какой-то конкретный id, а не все записи в таблице.

Убрать where - дёрнет все..

siv1987:
При этом там видимо есть какая-то связь с первой таблицы %t1%_id

Ну, формально приведённая структура и пример запроса расходятся:

izbushka:
t1: id, min_price, max_price
izbushka:
update t1 set min_price=(select min(price) from t2 where id=t1.item_id)

Поэтому, думаю, ТС разберётся, как предложенный вариант испоьзовать..

Я лишь на всякий случай уточнил, действительно ли его запрос отрабатывает корректно... (иначе нафиг тогда id в t1?)

siv1987
На сайте с 02.04.2009
Offline
427
#7
ivan-lev:
Убрать where - дёрнет все..

Сначала мне тоже показалось, что запросы бессмысленные, но.. предположим такую структуру таблицы

t1

-------

id | min| max

-------

1

2

3

-------

t2

-------

id | t1_id | price

-------

1 | 1

2 | 1

3 | 2

4 | 2

-------

тогда запрос update t1 set min_price=(select min(price) from t2 where id=t1.item_id)

имеет право на жизнь.

и, имхо

SELECT MIN(price), MAX(price), t1_id FROM t2 GROUP BY t1_id

ТС-у бы конечно следовало бы привести нормальную структуру таблиц

IL
На сайте с 20.04.2007
Offline
435
#8
siv1987:
Сначала мне тоже показалось, что запросы бессмысленные, но.. предположим такую структуру таблицы

я про WHERE в своём запросе

izbushka
На сайте с 08.06.2007
Offline
110
#9
siv1987:
update поддерживает join-ы

но не поддерживает group by.

Структура такая:

t1

-----------------

id | min | max

-----------------

1 2 4

2 2 5

3 1 6

t2

-----------------

id | price

-----------------

1 2

1 4

1 3

2 4

2 5

-----------------

id в таблицах - общее

При этом мой запрос

update t1 set max_price=(select max(price) from t2 where id=t1.id)

Делает ровно то, что надо, но только для поля max (и min отдельно) благодаря выделенному фрагменту (каждую строку по id, а не все строки, ivan-lev)

UPD: да, прошу прощения, там опечатка была (правильно красным)

IL
На сайте с 20.04.2007
Offline
435
#10
izbushka:
Делает ровно то, что надо, но только для поля max (и min отдельно) благодаря выделенному фрагменту

Судя по структуре, в таблице t1 нет поля item_id, тем не менее в запросе оно указано и верно отрабатывает.. Магия? Или всё же?

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий