@entermix

Почему происходит ошибка при выполнении SQl запроса?

Почему происходит ошибка при выполнении SQl запроса?

UPDATE 
  `orders` as `o`
SET 
  `diff` = (
    SELECT 
      `created`
    FROM 
      (
        SELECT 
          `created` 
        FROM 
          `orders`
        WHERE 
          `id` <> `o`.`id` 
          AND `client_id` = `o`.`client_id` 
          AND `created` <= `o`.`created` 
        ORDER BY 
          `created` DESC 
        LIMIT 
          1
      ) as `temp` 
    LIMIT 
      1
  ),
    `upd` = 1
WHERE 1

#1054 - Unknown column 'o.id' in 'where clause'

Как должна выглядеть конструкция, чтобы поле ps.id было доступно для WHERE?
  • Вопрос задан
  • 583 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В MySQL сделать то, что вы хотите, можно, но запрос получится крайне неэффективный.
UPDATE (
  SELECT `t1`.`id` AS `id`, MAX(`t2`.`created`) AS `created`
    FROM `orders` AS `t1`
    JOIN `orders` AS `t2` ON `t2`.`client_id` = `t1`.`client_id` 
      AND `t2`.`id` <> `t1`.`id` AND `t2`.`created` <= `t1`.`created`
    GROUP BY `t1`.`id`
  ) AS `t` 
  RIGHT JOIN `orders` AS `o` ON `o`.`id` = `t`.`id`
  SET `o`.`diff` = `t`.`created`
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Immortal_pony
@Immortal_pony Куратор тега MySQL
Никак.
Вы не можете опираться в подзапросах на данные таблицы, для которй выполняется UPDATE. Именно поэтому вам пришлось использовать подзапрос второго уровня, а не первого.

Попробуйте описать задачу, которую пытаетесь выполнить, и возможно кто-то сможет помочь :)
Ответ написан
Ваш ответ на вопрос

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

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