我很难在这里围绕一个概念。我有三个相同结构的表。我需要table 1
与table 2
和INSERT INTO
table 3
合并。我的问题:
table 1
和table 2
内容重复,例外情况为ID
。我不会将ID
用于除AI
以外的任何其他内容,因此这不是一个问题。
我希望完成的一个例子是:
original TABLE 1
_________________________________________________________
| ID | Col 2 | Col 3 | Col 4 |
|---------------------------------------------------------|
| 1 | stuff_1 | stuff_2 | stuff_3 |
|---------------------------------------------------------|
| 2 | stuff_x | stuff_y | stuff_z |
|_________________________________________________________|
与
结合使用 original TABLE 2
_________________________________________________________
| ID | Col 2 | Col 3 | Col 4 |
|---------------------------------------------------------|
| 3 | stuff_1 | stuff_2 | stuff_3 |
|---------------------------------------------------------|
| 4 | stuff_a | stuff_b | stuff_c |
|_________________________________________________________|
制作
combined TABLE 3 (notice ID's are not counted in duplicate check)
_________________________________________________________
| ID | Col 2 | Col 3 | Col 4 |
|---------------------------------------------------------|
| ? | stuff_1 | stuff_2 | stuff_3 |
|---------------------------------------------------------|
| ? | stuff_x | stuff_y | stuff_z |
|---------------------------------------------------------|
| ? | stuff_a | stuff_b | stuff_c |
|_________________________________________________________|
我已尝试insert into table 3 select * from table 2;
,然后从表1中执行insert ignore
。我也尝试了replace into
,但由于我省略了ID,因此无效列数已关闭。有没有人有任何想法如何在处理ID问题时将这两者合并到第三个表中?我将重申,ID是什么并不重要,因为它们永远不会被使用。
答案 0 :(得分:2)
您可以使用GROUP BY
展开重复项,同时保留ID
值。
这会为您提供唯一的Col1
,Col2
和Col3
值,并会将ID
设置为所有行的最小ID
值合并为重复:
INSERT INTO Table3 (ID, Col1, Col2, Col3)
SELECT MIN(ID), Col1, Col2, Col3
FROM (
SELECT ID, Col1, Col2, Col3 FROM Table1
UNION SELECT ID, Col1, Col2, Col3 FROM Table2
) Table1And2
GROUP BY Col1, Col2, Col3
根据您发布的数据,结果应为:
ID Col1 Col2 Col3
-- ------- ------- -------
1 stuff_1 stuff_2 stuff_3
2 stuff_a stuff_b stuff_c
4 stuff_x stuff_y stuff_z
答案 1 :(得分:0)
我在table3上添加了col2,col3,col4的唯一索引
alter table t3 add unique u1 (col2, col3, col4);
然后做了
insert ignore into t3 select * from t1 union select * from t2;
获取
+------+---------+---------+---------+
| id | col2 | col3 | col4 |
+------+---------+---------+---------+
| 1 | stuff_1 | stuff_2 | stuff_3 |
| 2 | stuff_x | stuff_y | stuff_z |
| 4 | stuff_a | stuff_b | stuff_c |
+------+---------+---------+---------+
答案 2 :(得分:0)
目标是将Table1的内容插入表3中,并将表2中不在表1中的内容插入表3中。以下查询就是这样做的。
INSERT INTO Table3 (Col1, Col2, Col3)
SELECT Col1,
Col2,
Col3
FROM Table1
UNION
SELECT Col1,
Col2,
Col3
FROM Table2
WHERE (Col1, Col2, Col3) NOT IN (SELECT Col1, Col2, Col3 FROM Table 1);