When you want to UPDATE
a table with information from an associated table, you can JOIN
the associated table into the statement.
Example
Let's say you have a database schema where an Employee belongs_to :department
:
+-----------------+
| Employee | +------------+
|-----------------| n 1 | Department |
| email |-------------------|------------+
| department_id | | name |
+-----------------+ +------------+
Because of performance reason you decide to cache the department's name into a new column Employee#department_name
:
+-----------------+
| Employee | +------------+
|-----------------| n 1 | Department |
| email |-------------------|------------+
| department_id | | name |
| department_name | +------------+
+-----------------+
You add the column like this:
ALTER TABLE employees ADD COLUMN department_name TEXT;
Now you need to backfill existing Employee
records with the new department_name
. Since the department's name lives in another table, you need to JOIN
both tables during the UPDATE
.
In MySQL you can do it like this:
UPDATE employees
LEFT JOIN departments ON employees.department_id = departments.id
SET department_name = departments.name
In PostgreSQL the syntax is a little unfamiliar:
UPDATE employees
SET department_name = departments.name
FROM departments
WHERE employees.department_id = departments.id
There is also a card on updating multiple columns with multiple joins in PostgreSQL.
Posted by Arne Hartherz to makandra dev (2015-04-24 09:50)