如何使用 mysql 中另一个 table 的列来填充列

How to fill a column using another table's column in mysql

我有一个名为 tbl_employer

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

我想加入这个 table 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_employer.

填补 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    | 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

这可能会有所帮助:

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 并且可以用于 JOIN 但如果没问题那么你可以使用这个查询:

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

您需要更新查询

update tbl_remit set emp_cat = (select tbl_employer. emp_type from tbl_employer where tbl_employer. id = tbl_remit.id)