首页 > 解决方案 > 如何在 MYSQL 中插入来自不同数据库的新表值及其匹配 id

问题描述

我有我的两个 MYSQL 数据库:

数据库 1 与表:Employee与列:

和数据库 2 与表:Employee_log与列:

我现在已经创建了第三个数据库 3,其中包含 table:Employee_Details列:

我还设法Employee_Details使用以下 SQL 查询将日期插入到表中:

 INSERT INTO database3.Employee_Details(Employee_ID, Employee_Code)
SELECT Employee_ID, Employee_Code FROM database 1.Employee;

但是,现在我想将数据库 2 表中的Dateand包含到具有匹配员工 ID 的数据库 3 中。我尝试使用上面的代码,但是日期被插入到表中,在其他列值为 NULL 的新行中。TimeEmployee_logEmployee_ID

Example:
Employee_ID Employee_Code Date
1            1011
2            1012
Null         Null         09/05/2018
Null         Null         08/05/2018 

那么,如何将日期插入其匹配项Employee_id,有人可以帮我解决这个问题。谢谢,

标签: mysqlsqlsql-insert

解决方案


您可以先删除database3.Employee_Details.

DELETE FROM database3.Employee_Details;

接下来,INSERT ... SELECT像你一样做,但database1.Employee这次database2.Employee_log加入。

INSERT INTO database3.Employee_Details
            (Employee_ID,
             Employee_Code,
             Date,
             Time)
            SELECT Employee.Employee_code,
                   Employee.Employee_ID,
                   Employee_log.Date,
                   Employee_log.Time
                   FROM database1.Employee
                        LEFT JOIN database2.Employee_log
                                  ON Employee_log.Employee_ID = Employee.Employee_ID;

通常,连接结合了两个表的行。ON如果子句中的条件对于该对行为真,则右表的每一行都附加到左表的行。

有一些不同口味的连接。这里我们使用一个LEFT JOIN. 在 aLEFT JOIN中,左表(JOIN关键字左侧的表)的行包含在结果中,即使右表中没有匹配的行也是如此。结果中的各个列都为空,而不是右表中的列值,因为没有来自匹配行的值。

相反, aINNER JOIN仅包含左表中存在右表匹配行的那些行。

要包括所有员工,即使他们没有可用的日志数据,我们也必须在LEFT JOIN此处选择一个。

如果您不想重新开始,可以database3.Employee_Details使用缺失值进行更新。

UPDATE database3.Employee_Details
       LEFT JOIN database1.Employee_log
                 ON Employee_log.Employee_ID = Employee_Details.Employee_ID
       SET Employee_Details.Date = Employee_log.Date,
           Employee_Details.Time = Employee_log.Time;

我们再次使用 a并使用连接结果中的相应值LEFT JOIN设置子句中的字段。SET

然后用 empty 删除不必要的行Employee_ID

DELETE FROM database3.Employee_Details
       WHERE Employee_Details.Employee_ID IS NULL;

推荐阅读