Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MYSQL中插入来自不同数据库的新表值及其匹配id_Mysql_Sql_Sql Insert - Fatal编程技术网

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

如何在MYSQL中插入来自不同数据库的新表值及其匹配id,mysql,sql,sql-insert,Mysql,Sql,Sql Insert,我有两个MYSQL数据库: 数据库1,表:Employee,列: 员工代码和 Employee\u ID 数据库2的表:Employee\u log,列为: 日期 时间和 员工ID 现在,我创建了第三个数据库3,表为:Employee\u Details,列为: 员工代码 Employee\u ID 日期和 时间 我还使用以下SQL查询将日期插入到Employee\u Details表中: INSERT INTO database3.Employee_Details(Employe

我有两个MYSQL数据库:

数据库1,表:
Employee
,列:

  • 员工代码
  • Employee\u ID
数据库2的表:
Employee\u log
,列为:

  • 日期
  • 时间
  • 员工ID
现在,我创建了第三个数据库3,表为:
Employee\u Details
,列为:

  • 员工代码
  • Employee\u ID
  • 日期
  • 时间
我还使用以下SQL查询将日期插入到
Employee\u Details
表中:

 INSERT INTO database3.Employee_Details(Employee_ID, Employee_Code)
SELECT Employee_ID, Employee_Code FROM database 1.Employee;
但是,现在我想将数据库2表中的
日期
时间
与匹配的员工ID一起包含到数据库3中:
Employee_log
。我尝试使用上述代码,但日期被插入到表中
Employee_ID
之后的新行中,其他列值为NULL

Example:
Employee_ID Employee_Code Date
1            1011
2            1012
Null         Null         09/05/2018
Null         Null         08/05/2018 
那么,我如何将日期插入到匹配的
员工id
,有人能帮我吗。
谢谢,

您可以先删除
数据库3.Employee\u Details
中的所有行,然后重新开始

DELETE FROM database3.Employee_Details;
接下来,执行
插入。。。像以前一样选择
,但这次加入
数据库1.员工
数据库2.员工日志

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
中,即使右表中没有匹配的行,左表的行(JOIN关键字的左表)也会包含在结果中。结果中的各个列都是空的,而不是右表中的列值,因为匹配行中没有值

相比之下,
内部联接
只包含左表中存在右表匹配行的行

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

如果您不想重新开始,可以使用缺少的值更新
数据库3.Employee\u 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;
我们再次使用
左连接
,并使用连接结果中的相应值设置
set
子句中的字段

然后删除员工ID为空的不必要行

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

您可以按以下方式进行插入:

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;

你为什么不在一个数据库上完成这些工作?