2

我很难在这里围绕一个概念来思考。我拥有的是三个结构相同的表。我需要table 1结合table 2and 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; ,然后insert ignore从表 1 中进行操作。我也尝试replace into过,但是因为我省略了 ID,所以这些不起作用,因为列数已关闭。有没有人知道如何在处理 ID 问题时将这两个组合到第三个表中?我将重申,ID 是什么并不重要,因为它们永远不会被使用。

4

3 回答 3

2

您可以使用在保留值GROUP BY的同时展平重复项。ID

这将为您提供唯一Col1Col2Col3值,并将 设置为任何合并为重复的行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
于 2013-05-21T18:37:21.090 回答
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 |
+------+---------+---------+---------+
于 2013-05-21T18:44:50.610 回答
0

目标是将Table1的内容插入Table3,将Table2中不在Table1的内容插入Table3。以下查询正是这样做的。

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);
于 2013-05-21T18:47:12.737 回答