将表中的行复制到具有不同ID的同一个表中

时间:2016-04-05 19:48:17

标签: php mysql sql

您好我正在尝试复制表格中的行但我需要使用不同的ID,也可以在该表格中。 id和second_id都是主键。和外键。

+----+-----------+
| id | second_id |
+----+-----------+
|  1 |         1 |
|  1 |         2 |
|  1 |         3 |
|  2 |         2 |
+----+-----------+

所以我需要将id 1的所有second_id复制到id 2,但最终,如果有id 3,请复制它。

结果应该是

+----+-----------+
| id | second_id |
+----+-----------+
|  1 |         1 |
|  1 |         2 |
|  1 |         3 |
|  2 |         2 |
|  2 |         1 |
|  2 |         3 |
+----+-----------+ 

id也是一个外键,所以如果我有id 3复制它就像id 2一样 任何解决方案?

1 个答案:

答案 0 :(得分:0)

使用表格的自我加入来获取idsecond_id的所有组合。然后使用LEFT JOIN过滤掉已存在的组合,以便将其余部分插入表格中。

INSERT INTO yourTable (id, second_id)
SELECT DISTINCT t1.id, t2.second_id
FROM yourTable AS t1
CROSS JOIN yourTable AS t2
LEFT JOIN yourTable AS t3 ON t1.id = t3.id AND t2.second_id = t3.second_id
WHERE t3.id IS NULL

DEMO

您可以简单地使用LEFT JOIN代替INSERT IGNORE。由于(id, second_id)是主键,因此插入时只会忽略重复项。

INSERT IGNORE INTO yourTable (id, second_id)
SELECT DISTINCT t1.id, t2.second_id
FROM yourTable AS t1
CROSS JOIN yourTable AS t2

DEMO