Как вставить новое табличное значение из другой базы данных вместе с соответствующим идентификатором в MYSQL - PullRequest
0 голосов
/ 09 мая 2018

У меня есть две базы данных MYSQL:

база данных 1 с таблицей: Employee со столбцами:

  • Employee_code и
  • Employee _ID

и база данных 2 с таблицей: Employee_log со столбцами:

  • Date
  • Time и
  • Employee_ID.

У меня сейчас создана третья база данных 3 с таблицей: Employee_Details со столбцами:

  • Employee_code
  • Employee_ID
  • Date и
  • Time.

Мне также удалось вставить дату в таблицу Employee_Details, используя следующий SQL-запрос:

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

но теперь я хочу включить Date и Time из таблицы базы данных 2: Employee_log в базу данных 3 с соответствующим идентификатором сотрудника. Я попытался использовать приведенный выше код, но даты вставляются в таблицу после Employee_ID в новой строке с другими значениями столбца NULL.

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

Итак, как мне вставить дату в ее соответствие Employee_id, может кто-нибудь, пожалуйста, помогите мне с этим. Спасибо,

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вы можете сделать вставку как:

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;
0 голосов
/ 09 мая 2018

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