表' tbl_name'被指定两次,两者都作为'更新'的目标。并作为单独的数据来源

时间:2016-04-05 13:41:17

标签: mysql sql

我在执行以下查询时遇到问题

UPDATE tbluser_payment
SET payment_date = SUBSTRING(payment_date, 1, 2) + 1
WHERE
    trans_updatetime IN (
        SELECT
            trans_updatetime
        FROM
            `tbluser_payment`
        WHERE
            DAY (
                cast(trans_updatetime AS date)
            ) IN ('28', '29', '30', '31')
    )

我搜索了很多问题,但没有得到与此查询相关的任何内容 他们正在将记录插入数据库。

如果where子句返回true,我想将payment_date coloumn更新为1

通过这种方式可以实现吗?

任何帮助都会得到赞赏

谢谢!

1 个答案:

答案 0 :(得分:3)

我认为这里不需要子查询。使用where子句中的条件。

UPDATE tbluser_payment
SET payment_date = SUBSTRING(payment_date, 1, 2) + 1
WHERE DAY(cast(trans_updatetime AS date)) IN ('28', '29', '30', '31')

修改:使用if以mmyyyy格式设置payment_date列。

UPDATE tbluser_payment
SET payment_date = IF(length(SUBSTRING(payment_date, 1, 2) + 1) < 2,
                      '0' + SUBSTRING(payment_date, 1, 2) + 1, 
                       SUBSTRING(payment_date, 1, 2) + 1
                     ) 
                     + SUBSTRING(payment_date, 3)
WHERE DAY(cast(trans_updatetime AS date)) IN ('28', '29', '30', '31')
and SUBSTRING(payment_date, 1, 2) <> 12