sql:基于以下行数据更新值

kzipqqlq  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(323)

我有一张table customer_service_typesphpmyadmin 使用以下字段:

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

以下是一些条目:

当用户为具有自定义创建日期的客户添加新服务时,应用程序将创建另一个id为3(付款)且日期为今天的服务。我想用以下服务的日期更新所有付款。
所以我要做的是更新 created 付款字段 created 以下服务对特定客户的价值。例如,我需要更新 createdid :168,值为 created 同样的道理 customer_id 但只有下一行的 service_type_id != 三。
迄今为止尝试过:

UPDATE customer_service_types cst
    SET cst.created = (SELECT created
                FROM customer_service_types cst2
                WHERE cst.id = (cst2.id - 1) AND cst2.service_type_id <> 3
               ) 
    WHERE cst.service_type_id = 3;

但我有个错误:
不能在from子句中为update指定目标表'cst'
我不知道这个查询是否会产生期望的结果

cdmah0mi

cdmah0mi1#

你可以使用 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;
92dk7w1h

92dk7w1h2#

您可以将子查询转换为派生表形式。请尝试以下操作:

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;

相关问题