在mySql中使用多个表和Order By和LIMIT更新语句

时间:2018-04-16 04:51:29

标签: mysql sql-order-by limit

当我尝试在mySql中运行带有多个表和Order By和LIMIT的更新语句时,如下所示

CREATE TRIGGER `Percent` AFTER INSERT ON `tbl_products`
FOR EACH ROW BEGIN
UPDATE
tbl_product_rate t1,
  ( SELECT tbl_products.id, (rate * number) AS prt
    FROM tbl_products left join tbl_products_rate on tbl_products.id = tbl_products_rate.id GROUP BY id
  ) t2
SET
  t1.option = t2.prt
WHERE
  t1.id = t2.id ORDER BY t1.id LIMIT 1;
END


我有一个如下错误,

[Last executed query: EXECUTE mdb2_statement_mysql_142db9909b0277f32407f2a5d4da240eabf37dd822 USING @0]
[Native code: 1221]
[Native message: Incorrect usage of UPDATE and ORDER BY]


谁能告诉我如何修复上面的更新语句,以便order by和limit可以用于更新语句 多个表?

P.S。如果我在没有ORDER BY和LIMIT的情况下运行update语句,它将更新表中存在的所有行而不会出现错误。

1 个答案:

答案 0 :(得分:1)

正如更新语句中的mysql手册所说:

  

您还可以执行覆盖多个表的UPDATE操作。但是,您不能将ORDER BY或LIMIT与多表UPDATE一起使用。

这意味着您需要将多表更新语句转换为单表更新语句才能执行操作。

在查询中,我觉得您需要rate * number表中的单个值(tbl_products)。

我不清楚选择标准,因为您在用于加入的字段上进行排序,这意味着该字段对于所有记录都具有完全相同的值,并且您不会对您的组使用任何聚合函数。这意味着您的子查询是针对sql标准的,并且只能在mysql中运行,因为您没有通过sql模式设置的唯一完整组。您也没有引用正在更新的记录,因此不知道此查询与当前记录的关系。

因此我无法建议如何将连接重写为子查询。但这就是你需要做的事情:将你的联接重写为子查询。