besogonskiy
@besogonskiy

Можно ли передать поле id запроса в подзапрос?

Есть задача обновить поле в таблице минимальным значением другого поля из связанной таблицы.

Если в подзапрос передать конкретное значение, то работать будет:

update master_products 
set price_min = (
    select MIN(product_prices.price) 
    from product_prices 
    where product_id in (
        select id from products where published=1 and available = 1 and master_product_id = 71
    )
 ) 
where published = 1 and available = 1;

Но тогда мне придется в цикле перебирать все записи таблицы master_products и вызывать этот запрос передавая конкретный id вместо значения 71.

А мне нужно, чтобы поле master_products.id подставлялось вместо 71. Можно ли так сделать?

update master_products 
set price_min = (
    select MIN(product_prices.price) 
    from product_prices where product_id in (
        select id from products where published=1 and available = 1 and master_product_id = master_products.id
    )
 ) 
where published = 1 and available = 1;

у меня что то не отрабатывает такой запрос. Пишет, что price_min не может быть null.
  • Вопрос задан
  • 31 просмотр
Решения вопроса 2
besogonskiy
@besogonskiy Автор вопроса
Сам отечаю на свой вопрос: да. такое сработает. Проверил.
Ответ написан
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Делаем одним запросом
update master_products
join (
  select master_product_id, MIN(product_prices.price) min_price
  from product_prices 
  join products on product_prices.product_id = products.id
  products.published=1 and products.available = 1
  group by master_product_id
) min_prices
set price_min = min_prices.min_price
where published = 1 and available = 1;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы