MySql Update加入两个表SET CASE无效组功能

时间:2012-10-11 19:45:16

标签: mysql join sql-update case

尝试通过连接两个表并使用CASE语句来更新表 我得到旧的错误代码:1111无效使用群组功能。关于如何解决的任何想法?

UPDATE table1 JOIN table2 ON (table1.ITEM = table2.ITEM)
SET table1.TURNOVERSCORE=CASE
WHEN ((COUNT(table2.ORDER_NUMBER))/12) < 1 AND table1.CAT = 'E' THEN .05
WHEN ((COUNT(table2.ORDER_NUMBER))/12) >= 1 AND ((COUNT(table2.ORDER_NUMBER))/12) < 4 AND table1.CAT = 'E' THEN .5
WHEN ((COUNT(table2.ORDER_NUMBER))/12) >= 4 AND table1.CAT = 'E' THEN 1
WHEN ((COUNT(table2.ORDER_NUMBER))/12) <= 5 AND table1.CAT != 'E' THEN .05
WHEN ((COUNT(table2.ORDER_NUMBER))/12) >= 6 AND ((COUNT(table2.ORDER_NUMBER))/12) < 11 AND table1.CAT != 'E' THEN .25
WHEN ((COUNT(table2.ORDER_NUMBER))/12) >= 11 AND ((COUNT(table2.ORDER_NUMBER))/12) < 21 AND table1.CAT != 'E' THEN .5
WHEN ((COUNT(table2.ORDER_NUMBER))/12) >= 21 AND table1.CAT != 'E' THEN 1 END

1 个答案:

答案 0 :(得分:1)

我猜你正在创建一个交叉加入产品,在进行更新时我认为不允许这样做。

也许先尝试聚合表2,如下所示:

UPDATE table1 
JOIN (SELECT count(*) as cnt, item FROM table2 GROUP BY item) t2 
ON table1.item = t2.item

SET table1.TURNOVERSCORE=CASE
WHEN t2.cnt/12 < 1 AND table1.CAT = 'E' THEN .05
WHEN t2.cnt/12 >= 1 AND t2.cnt/12 < 4 AND table1.CAT = 'E' THEN .5
WHEN (t2.cnt/12) >= 4 AND table1.CAT = 'E' THEN 1
WHEN (t2.cnt/12) <= 5 AND table1.CAT != 'E' THEN .05
WHEN (t2.cnt/12) >= 6 AND (t2.cnt/12) < 11 AND table1.CAT != 'E' THEN .25
WHEN (t2.cnt/12) >= 11 AND (t2.cnt/12) < 21 AND table1.CAT != 'E' THEN .5
WHEN (t2.cnt/12) >= 21 AND table1.CAT != 'E' THEN 1 END