【问题标题】:Combine two SQL tables with replacement?将两个 SQL 表合并为替换?
【发布时间】:2018-01-05 17:08:19
【问题描述】:

长话短说,我需要能够组合两个表(一个是前一个表的延续,但有一点重叠)。然后我需要将一列设置为主键,这意味着没有重复。当我尝试只使用 SQL Management Studio 中的导入向导并将一个表导入另一个表时,它只是将一个表中的所有数据添加到下一个表中。我需要找出某种方法或 SQL 命令,将新表中的所有数据导入旧表中,并将任何现有的重复数据替换为新表中的数据。

这样想,我有两张表,数据如下:

People_Old table
+------+--------+
| Name | Color  |
+------+--------+
| Mary | Blue   |
| Katy | Yellow |
| Jim  | Green  |
| John | Red    |
+------+--------+

People table
+------+--------+
| Name | Color  |
+------+--------+
| Jim  | Silver |
| John | Brown  |
| Greg | Purple |
| Liz  | Pink   |
+------+--------+

假设“名称”列是主键,我想将新“人物”表中的数据添加到旧“人物_旧”表中,但替换重叠数据,以免重复。在本例中,我希望最终的“People_Old”表为:

+------+--------+
| Name | Color  |
+------+--------+
| Mary | Blue   |
| Katy | Yellow |
| Jim  | Silver |
| John | Brown  |
| Greg | Purple |
| Liz  | Pink   |
+------+--------+

【问题讨论】:

标签: mysql sql database datatable


【解决方案1】:

使用REPLACE 语句,类似于:

replace into people_old select * from people;

【讨论】:

【解决方案2】:
DROP TABLE IF EXISTS old;

CREATE TABLE old
(Name VARCHAR(12) NOT NULL PRIMARY KEY
,Color  VARCHAR(12) NOT NULL
);

INSERT INTO old VALUES
('Mary','Blue'),
('Katy','Yellow'),
('Jim','Green'),
('John','Red');

DROP TABLE IF EXISTS new;

CREATE TABLE new
(Name VARCHAR(12) NOT NULL PRIMARY KEY
,Color  VARCHAR(12) NOT NULL
);

INSERT INTO new VALUES
('Jim' ,'Silver'),
('John','Brown'),
('Greg','Purple'),
('Liz' ,'Pink');


SELECT * FROM old;
+------+--------+
| Name | Color  |
+------+--------+
| Mary | Blue   |
| Katy | Yellow |
| Jim  | Green  |
| John | Red    |
+------+--------+

SELECT * FROM new;
+------+--------+
| Name | Color  |
+------+--------+
| Jim  | Silver |
| John | Brown  |
| Greg | Purple |
| Liz  | Pink   |
+------+--------+

INSERT INTO old 
SELECT name
     , color 
  FROM new 
    ON DUPLICATE KEY UPDATE old.color = new.color;

SELECT * FROM old;
+------+--------+
| Name | Color  |
+------+--------+
| Mary | Blue   |
| Katy | Yellow |
| Jim  | Silver |
| John | Brown  |
| Greg | Purple |
| Liz  | Pink   |
+------+--------+
6 rows in set (0.00 sec)

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2013-05-19
    • 2019-04-28
    • 2014-01-06
    • 2015-05-27
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多