Как обновить таблицу, используя выбранную группу по второй и сам в качестве источника данных в MySQL? - PullRequest
1 голос
/ 04 мая 2010

Я могу сделать это:

SELECT t2.value + sum(t3.value)
FROM tableA t2, tableB t3
WHERE t2.somekey = t3.somekey
GROUP BY t3.somekey

Но как это сделать?

 UPDATE tableA t1
    SET speed = (
        SELECT t2.value + sum(t3.value)
        FROM tableA t2, tableB t3
        WHERE t2.somekey = t3.somekey
        AND t1.somekey = t3.somekey
        GROUP BY t3.somekey
   )
;

MySQL говорит, что это незаконно, поскольку вы не можете указать целевую таблицу t1 для обновления в предложении FROM.

Ответы [ 2 ]

8 голосов
/ 04 мая 2010

Вы можете сделать это, переписав запрос:

UPDATE tableA t1, (
   SELECT somekey, SUM(value) value
   FROM tableB t3
   GROUP BY somekey
) t2
SET speed = t1.value + t2.value
WHERE t1.somekey = t2.somekey;
0 голосов
/ 04 мая 2010

Вы используете расширение MySQL до GROUP BY, которое не следует использовать в этом контексте.

Даны следующие значения:

tableA

value somekey
1     1
2     1

tableB

value somekey
3     1
4     1

этот подзапрос:

    SELECT  t2.value + SUM(t3.value)
    FROM    tableA t2, tableB t3
    WHERE   t2.somekey = t3.somekey
            AND t1.somekey = t3.somekey
    GROUP BY
            t3.somekey

вернет вам либо 8, либо 9: он вычислит SUM(b.value) = 7 и затем добавит случайное значение из A для данного ключа.

Для этого примера данных, какое значение вы хотите обновить до скорости?

...