sql—如何在mysql中插入来自不同数据库的新表值及其匹配id

d8tt03nd  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(502)

我有两个mysql数据库:
数据库1和表: Employee 使用列: Employee_codeEmployee _ID db2 和表: Employee_log 使用列: Date , Time 以及 Employee_ID .
现在,我用表3创建了第三个数据库: Employee_Details 使用列: Employee_code Employee_ID DateTime .
我还设法把日期插入 Employee_Details 使用以下sql查询的表:

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

但是,现在我想包括 Date 以及 Time 从 db2 表: Employee_log 我试着使用上面的代码,但是日期被插入到表中 Employee_ID 在其他列值为空的新行中。

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

那么,如何将日期插入到匹配项中 Employee_id ,谁能帮我一下吗。谢谢,

flseospp

flseospp1#

您可以先删除中的所有行来重新开始 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 . 在一个 LEFT JOIN 左表的行(左表的行) JOIN 关键字)包含在结果中,即使右表中没有匹配的行。结果中的各个列都是空的,而不是右表中的列值,因为匹配行中没有值。
相比之下 INNER 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;

我们再次使用 LEFT JOIN 把田地放在 SET 子句中的相应值。
然后删除不必要的空行 Employee_ID .

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

vktxenjb2#

您可以按以下方式插入:

INSERT INTO database3.Employee_Details(Employee_ID, Employee_Code)
    SELECT e.Employee_ID, e.Employee_Code, el.date
    FROM database 1.Employee e LEFT JOIN
         Employee_log el
         ON e.Employee_ID = el.Employee_ID;

您可能会发现创建表更简单:

CREATE TABLE database3.Employee_Details as 
    SELECT e.Employee_ID, e.Employee_Code, el.date
    FROM database 1.Employee e LEFT JOIN
         Employee_log el
         ON e.Employee_ID = el.Employee_ID;

相关问题