【发布时间】:2021-05-30 15:56:35
【问题描述】:
我在 postgresql DB 上有三个表,并尝试更新表,但未能得到我想要的结果。请帮助我获得有效的结果。
第一个表是“员工”。 在此表中,“employee_id”的前三个字符表示员工类型。 例如,employee_id="AA1-11111" 是 employee_type="AA1" 的成员。
| employee_id | department |
|---|---|
| AA1-11111 | A |
| AA1-22222 | B |
| AB1-11111 | A |
第二个表是“评估”。 在此表中,为 (employee_type, department) 定义了评估标准。 例如,employee_type="AA1" 和 department="A" 的员工将通过assessment_criteria="XX1X" 进行评估。
| employee_type | department | assessment_criteria |
|---|---|---|
| AA1 | A | XX1X |
| AA1 | B | XX1Y |
| AA2 | A | XX2X |
第三个表是“employee_assessment”。在此表中定义了每个员工的评估标准。 (此表是由“员工”和“考核”通过夜间批处理计算得出的。)
| employee_id | department | assessment_criteria |
|---|---|---|
| AA1-11111 | A | XX1X |
| AA1-22222 | B | XX1Y |
| AB1-11111 | A | Null |
我想要做的是......当“评估”表更新时更新“employee_assessment”表。 当“评估”表如下更新时...
| employee_type | department | assessment_criteria |
|---|---|---|
| AA1 | A | XX1X |
| AA1 | B | NEW |
| AA2 | A | Null |
我想像这样更新“employee_assessment”表。
| employee_id | department | assessment_criteria |
|---|---|---|
| AA1-11111 | A | XX1X |
| AA1-22222 | B | NEW |
| AB1-11111 | A | Null |
我试过了
UPDATE
employee_assessment
SET assessment_criteria=employee_assessment.assessment_criteria
FROM employee
LEFT JOIN (SELECT employee_id, LEFT(employee_id,3) as emp_type, department as emp_department from employee) as t1
ON
employee.employee_id=t1.employee_id
and
employee.department=t1.emp_department
left join assessment
on
t1.emp_type=assessment.employee_type
and
t1.emp_department=assessment.department;
但我得到了这个结果。
| employee_id | department | assessment_criteria |
|---|---|---|
| AA1-11111 | A | XX1X |
| AA1-22222 | B | XX1X |
| AB1-11111 | A | XX1X |
我的查询似乎是错误的。
【问题讨论】:
标签: postgresql join sql-update