ФорумРазработкаБазы данных → MySQL: Не возможно обновить данные в таблице, в которой производишь выборку

MySQL: Не возможно обновить данные в таблице, в которой производишь выборку

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 июля 2009 г. 18:21, спустя 37 секунд

    Не возможно обновить данные в таблице, в которой производишь выборку


    mysql> update `categories` set `size` = (select (`count` / ((max(`count`) - min(`count`)) / 10)) from `categories`);
    ERROR 1093 (HY000): You can't specify target table 'categories' for update in FROM clause


    не в курсе как обойти?)

    ——

    Второй вариант, без селекта:

    mysql> update `categories` set `size` = (`count` / ((max(`count`) - min(`count`)) / 10));
    ERROR 1111 (HY000): Invalid use of group function


    тоже не прокатывает, есть соображения как это тоже обойти?

    ——

    По отдельности все работает:


    mysql> select (`count` / ((max(`count`) - min(`count`)) / 10)) from `categories`;
    +——————————————————–+
    | (`count` / ((max(`count`) - min(`count`)) / 10)) |
    +——————————————————–+
    |                                             3.47826087 |
    +——————————————————–+
    1 row in set (0.00 sec)


    mysql> update `categories` set `size` = 3.47826087;
    Query OK, 0 rows affected (0.00 sec)
    Rows matched: 21  Changed: 0  Warnings: 0


    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 июля 2009 г. 18:20, спустя 23 часа 59 минут 23 секунды

    Так тоже не работает…


    update `categories` as `c1`
    JOIN `categories` as `c2`
    using(`category_id`)
    set `c1`.`size` = (`c2`.`count` / ((max(`c2`.`count`) - min(`c2`.`count`)) / 10));

    ERROR 1111 (HY000): Invalid use of group function
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 июля 2009 г. 18:38, спустя 17 минут 22 секунды

    Решение:


    – создаем коэффициент деления
    set @percent = (select (max(`count`) - min(`count`)) / 10 from `categories`);

    – создаем вьюху
    create view `categories_view` as select `category_id`, `count` from `categories`;

    – жойним таблицу и вьюху, обновляя данные
    update `categories` as `c`
    join `categories_view` as `cv`
    using(`category_id`)
    set `c`.`size` = `cv`.`count` / @percent;

    adw/0
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 27 июля 2009 г. 18:45, спустя 7 минут 46 секунд

    adw0rd, ты охуенно поговорил так сам с собой
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 июля 2009 г. 18:47, спустя 1 минуту 49 секунд


    adw0rd, ты охуенно поговорил так сам с собой

    на самом деле мы говорили с dics'ом в скайпе, а код я выкладывал сюда, чтобы другим помогло на будущее ;)
    adw/0
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 27 июля 2009 г. 18:55, спустя 7 минут 58 секунд



    adw0rd, ты охуенно поговорил так сам с собой

    на самом деле мы говорили с dics'ом в скайпе, а код я выкладывал сюда, чтобы другим помогло на будущее ;)
    :DDD Верю )
    Спустя 17 сек.
    ПыСы 1212
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 июля 2009 г. 20:01, спустя 1 час 5 минут 31 секунду

    Продолжение http://adw0rd.ru/2009/mysql-update-error/
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 27 июля 2009 г. 23:07, спустя 3 часа 6 минут 45 секунд

    mysql> update `categories` set `size` = (`count` / ((max(`count`) - min(`count`)) / 10));
    ERROR 1111 (HY000): Invalid use of group function


    не проще ли тут group дописать?)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 июля 2009 г. 4:43, спустя 5 часов 35 минут 34 секунды

    phpdude, покажи как
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 28 июля 2009 г. 5:29, спустя 45 минут 48 секунд

    хз)) я просто ошибку проанализировал)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 июля 2009 г. 5:33, спустя 4 минуты 27 секунд

    phpdude, написано что неправильное так группировать функции… или нечто подобное )
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 28 июля 2009 г. 5:36, спустя 3 минуты 4 секунды


    phpdude, написано что неправильное так группировать функции… или нечто подобное )
    попробуй дописать нечто вида
    group by null в конце)) может сканает)
    Спустя 5 сек.
    просто проверить
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 июля 2009 г. 5:43, спустя 6 минут 59 секунд

    mysql> update `categories` set `size` = (`count` / ((max(`count`) - min(`count`)) / 10)) group by null;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synta
    x to use near 'group by null' at line 1

    mysql> update `categories` set `size` = (`count` / ((max(`count`) - min(`count`)) / 10)) group by rand();
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synta
    x to use near 'group by rand()' at line 1

    mysql> update `categories` set `size` = (`count` / ((max(`count`) - min(`count`)) / 10)) group by `category_id`;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synta
    x to use near 'group by `category_id`' at line 1
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 28 июля 2009 г. 5:46, спустя 3 минуты 5 секунд

    adw0rd, стрянно )))
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 июля 2009 г. 5:55, спустя 8 минут 23 секунды

    не угадал))
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!