SQL:根据以下行数据更新值

时间:2018-11-14 13:55:00

标签: mysql phpmyadmin

我在customer_service_types中有一个表phpmyadmin,其中包含以下字段:

id (int) | customer_id (int) | service_type_int (int) | price (decimal) | created (datetime) | card (tinyint)

以下是一些条目:

rows

当用户为具有自定义创建日期的客户添加新服务时,该应用程序正在创建ID为3(付款)的具有当前日期的另一项服务。我想用以下服务日期更新所有付款。

所以我要做的是使用针对特定客户的以下服务的created值更新付款的created字段。因此,例如,对于相同的created,我需要用id的值来更新created的{​​{1}}:168,但如果具有{{1} }!= 3。

到目前为止已尝试:

customer_id

但我收到此错误:

  

您不能在FROM子句中指定目标表'cst'用于更新

我不知道此查询是否会产生所需的结果

2 个答案:

答案 0 :(得分:2)

您可以将子查询转移到Derived Table表单中。请尝试以下操作:

UPDATE customer_service_types AS cst 
JOIN 
(
  SELECT id, created
  FROM customer_service_types
  WHERE service_type_id <> 3
) AS cst2 
  ON cst.id = (cst2.id - 1)

SET cst.created = cst2.created 
WHERE cst.service_type_id = 3;

答案 1 :(得分:0)

您可以使用join

UPDATE customer_service_types cst JOIN
       customer_service_types cstnext
       ON cstnext.id = cst.id and cstnext.service_type_id <> 3
    SET cst.created = cstnext.created
    WHERE cst.service_type_id = 3;