Сложный UPDATE (MySQL)

208
15 августа 2021, 18:30

Одним UPDATE надо решить следующую проблему: Если m_bid != 0 - записать это значение в smax. Иначе, записать в smax наименьшее из двух значений: m_bid из shops_table, либо max * bid_part. Я пробовал справиться с этим на тестовых таблицах и по частям. Такой UPDATE:

UPDATE cat_table t0
JOIN (
    SELECT sid, m_bid, max, bid_part
    FROM cat_table
) t1
SET t0.smax=
CASE
    WHEN t1.m_bid!=0 THEN t1.m_bid
    ELSE
    CASE
        WHEN 1<t1.max*t1.bid_part THEN 1
        ELSE t1.max*t1.bid_part
    END
END;

Отрабатывает корректно. Начинаю усложнять:

UPDATE cat_table t0
JOIN (
    SELECT sid, m_bid, max, bid_part
    FROM cat_table
) t1
JOIN (
    SELECT m_bid
    FROM shops_table sh
    WHERE t1.sid=sh.sid
) t2
SET t0.smax=
CASE
    WHEN t1.m_bid!=0 THEN t1.m_bid
    ELSE
    CASE
        WHEN t2.m_bid<t1.max*t1.bid_part THEN t2.m_bid
        ELSE t1.max*t1.bid_part
    END
END;

Ошибка

ERROR 1054 (42S22): Unknown column 't1.sid' in 'where clause'

Что мешает ему "зацепить" sid из первого SELECT? Как исправить?

Answer 1

Так?

UPDATE
  cat_table t0
  JOIN shops_table sh ON (
    t0.sid=sh.sid
  )
SET t0.smax =
  IF(
    t0.m_bid != 0,
    t0.m_bid,
    LEAST(sh.m_bid, t0.max*t0.bid_part)
  )
READ ALSO
Как передать изображение из canvas по ftp

Как передать изображение из canvas по ftp

Есть скрипт создающий изображение в canvas, это изображение получается сохранить в папку, а вот передать его по ftp не удается, он создает файл...

115
Подскажите с API QIWI PHP

Подскажите с API QIWI PHP

День добрыйЮзаю исходники из гитхаба по адресу : https://github

269
Двойной слеш в URL. ЧПУ Yii2

Двойной слеш в URL. ЧПУ Yii2

Есть Action в контроллере

149
Wordpress do_shortcode и $atts[&#39;shortcode&#39;] внутри

Wordpress do_shortcode и $atts['shortcode'] внутри

Всем привет, пытаюсь вывести shortcode, но не получаетсяНадеюсь кто-нибудь укажет на решение

99