您好我正在尝试复制表格中的行但我需要使用不同的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一样 任何解决方案?
答案 0 :(得分:0)
使用表格的自我加入来获取id
和second_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
您可以简单地使用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