如何通过考虑MySQL中的IFEXISTS规则来插入INTO SELECT



在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。但是如何通过INSERTing来自另一个表的数据SELECTed来应用IGNOREUPDATE行为

这样的组合确实是可能的:

基本查询

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
...
;

最新更新