mysql使用REPLACE INTO通过两个表添加或更新第三个表案例

2023-06-01 00:00:00 添加 案例 第三个

我的线上的功能是用是mysql的定时任务事件 ,定时从A,B表添加或更新至C表

sql语句里面用了很多方法函数,比如

CONCAT,REPLACE ,from_UNIXTIME,DATE_ADD,DATE,IF,NOW()

等等

该功能比较完整,所以我记录一下,方便加深自己的记忆,也希望帮助有这方面需求的同学


进入主题


三表描述:

三表有关联,通过两表数据生成第三个表数据;


三表名称:

aaa  A表
bbb  B表
ccc  C表

直接贴sql语句:


REPLACE INTO ccc SELECT
CONCAT(
A.`corperid`,
REPLACE (from_UNIXTIME( A.`addtime`,"%Y-%m"), '-', '')
) AS id,
A.corperid,
A._corperid,
 A.cityid,
 A._cityid,
B.remain remain,
B.`limit` `limit`,
B.`creditlimit` `creditlimit`,
B.`temcredit` `temcredit`,
'' remark,
0.00,
0.00,
0.00,
from_UNIXTIME( A.`addtime`,"%Y-%m"),
DATE_ADD(
DATE(
CONCAT(
from_UNIXTIME( A.`addtime`,"%Y-%m"),
'-',
IF (
B.expired > 0
AND B.expired <= 31,
B.expired,
'01'
)
)
),
INTERVAL 1 MONTH
) presettle,
0 `age`,
B.`_style` `style`,
B.`_belong` `saleman`,
NULL `settledate`,
NULL `invoice`,
0 `settlestatus`,
0 `partstatus`,
0 `invoicestatus`,
A.`_addtime`,
NOW() `modtime`,
NULL `param2`
FROM
`aaa` A,
`bbb` B
WHERE
service = 'Order'
AND A.corperid > 0
AND payway IN (30,31)
AND B.id = A.corperid
AND CONCAT(A.`corperid`, '_', from_UNIXTIME( A.`addtime`,"%Y-%m")) NOT IN (
SELECT
CONCAT(C.`corperid`, '_', C.`month`) AS str
FROM
`ccc` C HAVING str IS NOT NULL
)
GROUP BY
CONCAT(A.`corperid`, from_UNIXTIME( A.`addtime`,"%Y-%m"));

相关文章