Вы можете начать сначала, удалив все строки в 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;