在MySQL中,可以插入从另一个表检索的数据,例如:
INSERT INTO
`table2`
(
`table2_id`,
`foo`
)
SELECT
`id`,
`foo`
FROM
`table1`
WHERE
...
;
另一方面,也可以定义ON DUPLICATE
策略:
INSERT IGNORE
语句ON DUPLICATE KEY UPDATE
条款REPLACE
语句
现在。如何将两者合并并插入另一个表中的数据,但处理每一行的重复?对于REPLACE
,它的工作原理是在上面的查询中将INSERT
替换为REPLACE
。但是如何通过INSERT
ing来自另一个表的数据SELECT
ed来应用IGNORE
和UPDATE
行为
这样的组合确实是可能的:
基本查询
INSERT INTO
`table2`
(
`table2_id`,
`foo`
)
SELECT
`id`,
`foo`
FROM
`table1`
WHERE
...
REPLACE
REPLACE INTO
`table2`
(
`table2_id`,
`foo`
)
SELECT
`id`,
`foo`
FROM
`table1`
WHERE
...
ON DUPLICATE KEY UPDATE
INSERT INTO
`table2`
(
`table2_id`,
`foo`
)
SELECT
`id`,
`foo`
FROM
`table1`
WHERE
...
ON DUPLICATE KEY UPDATE
`foo` = `table1`.`foo`
;
INSERT IGNORE
INSERT IGNORE
`table2`
(
`table2_id`,
`foo`
)
SELECT
`id`,
`foo`
FROM
`table1`
WHERE
...
;