Как заполнить столбец, используя столбец другой таблицы в mysql

#mysql #database #join #database-design #multiple-columns

#mysql #База данных #Присоединиться #база данных-дизайн #несколько столбцов

Вопрос:

у меня есть таблица с именем tbl_employer

 |  id  | employer |  emp_type  |
|   1  |   aaa    | GOVERNMENT |
|   2  |   bbb    |  PRIVATE   |
  

Я хочу объединить его с этой таблицей tbl_remit, потому что данные tbl_remit являются

 |RemitNo| id | employer |  emp_cat   |Amt_Remit|  AP_From |   AP_To  |
|  1    |  1 |   aaa    | GOVERNMENT |  20.00  |01/01/2016|01/31/2016|
|  2    |  1 |   aaa    | GOVERNMENT |  10.00  |02/01/2016|02/29/2016|
|  3    |  1 |   aaa    |            |  10.00  |03/01/2016|03/31/2016|
|  4    |  2 |   bbb    |  PRIVATE   |  50.00  |01/01/2016|01/31/2016|
|  5    |  2 |   bbb    |  PRIVATE   |  50.00  |02/01/2016|02/29/2016|
|  6    |  2 |   bbb    |            |  50.00  |03/01/2016|03/31/2016|
  

Я хочу заполнить недостающие данные из tbl_remit на основе tbl_employer.

 |RemitNo| id | employer |  emp_cat   |Amt_Remit|  AP_From |   AP_To  |
|  1    |  1 |   aaa    | GOVERNMENT |  20.00  |01/01/2016|01/31/2016|
|  2    |  1 |   aaa    | GOVERNMENT |  10.00  |02/01/2016|02/29/2016|
|  3    |  1 |   aaa    | GOVERNMENT |  10.00  |03/01/2016|03/31/2016|
|  4    |  2 |   bbb    |  PRIVATE   |  50.00  |01/01/2016|01/31/2016|
|  5    |  2 |   bbb    |  PRIVATE   |  50.00  |02/01/2016|02/29/2016|
|  6    |  2 |   bbb    |  PRIVATE   |  50.00  |03/01/2016|03/31/2016|
  

Я использовал инструкцию Join, но потерпел неудачу.

 SELECT r.RemitNo
     , r.id
     , r.employer
     , (SELECT e.emp_type 
          FROM tbl_employer e
         WHERE e.ID = r.ID) emp_cat
     , amt_remit
     , ap_from
     , ap_to 
  FROM tbl_remit r
  JOIN tbl_employer e 
    ON r.ID = e.ID
  

Комментарии:

1. Вам нужен UPDATE запрос, так как вы хотите изменить таблицу.

2. Вам нужен запрос на обновление… «обновить tbl_remit установить emp_cat = (выберите tbl_employer. emp_type из tbl_employer где tbl_employer. идентификатор = tbl_remit.id ) »

Ответ №1:

Может быть, это поможет:

 UPDATE tbl_remit AS r
JOIN tbl_employer AS e ON e.employer=r.employer    
SET r.emp_cat=e.emp_type
  

Имейте в виду, что если у вас много записей в таблицах, вам может потребоваться добавить INDEX поля работодателя в таблицах. Я не уверен на 100%, что если r.id равно e.id и может использоваться для объединения, но если все в порядке, вы можете использовать этот запрос:

 UPDATE tbl_remit AS r
JOIN tbl_employer AS e ON e.id=r.id
SET r.emp_cat=e.emp_type
  

Ваш неудачный запрос в вопросе должен выглядеть следующим образом:

 SELECT r.RemitNo
 , r.id
 , r.employer
 , e.emp_type
 , r.amt_remit
 , r.ap_from
 , r.ap_to 
FROM tbl_remit r
JOIN tbl_employer e 
ON r.ID = e.ID
  

Комментарии:

1. не совсем — в mysql вы должны присоединиться перед установкой, и mysql выдаст предупреждение, если вы не предоставите предложение where.

2. Извините за ошибку, исправил ее. Спасибо. Да, он выдаст предупреждение, но выполнит запрос.

3. Спасибо вам за все это решение. Я думал о создании другой таблицы, просто чтобы объединить ее, я никогда не думал о простом обновлении tbl_remit. Я прочитаю больше о запросах mysql. и индексы. еще раз спасибо.

4. обновил мой ответ правильной версией вашего последнего запроса select

Ответ №2:

Вам нужен запрос на обновление

обновить tbl_remit установить emp_cat = (выберите tbl_employer. emp_type из tbl_employer где tbl_employer. идентификатор = tbl_remit.id )