Office Branches
Description
In order to optimize your business, you’ve decided to merge a couple of your office branches and get rid of the outdated branch types.
The existing office branches and branch types are stored in the tables branches and branch_types, respectively. The tables have the following structures:
- branches:
branch_id: the branch ID;name: the name of the branch;branchtype_id: the branch type ID.
- branch_types
id: the unique branch ID;name: the name of the branch type.
You’ve decided to start small. As your first step, you want to delete the outdated branch types, all of which end with -outdated, from the branch_types table.
For now, you want to keep all the branches with the deleted branch types in the branches table, but to differentiate them you will set their branchtype_id to NULL. Update the database to make the required changes happen automatically when a record is deleted from branch_types.
Example
For the following tables branches
| branch_id | name | branchtype_id |
|---|---|---|
| 1 | Frankfurt branch | 2 |
| 2 | Paris branch | 3 |
| 3 | New York branch | 2 |
| 4 | Madrid branch | 1 |
and branch_types
| id | name |
|---|---|
| 1 | Small-outdated |
| 2 | Big |
| 3 | Medium |
the output should be
| branch_id | name | branchtype_id |
|---|---|---|
| 1 | Frankfurt branch | 2 |
| 2 | Paris branch | 3 |
| 3 | New York branch | 2 |
| 4 | Madrid branch | NULL |
- [execution time limit] 10 seconds (mysql)
Solution
1
2
3
4
5
6
7
8
9
10
11
CREATE PROCEDURE officeBranches()
BEGIN
ALTER TABLE branches ADD FOREIGN KEY (branchtype_id)
REFERENCES branch_types(id)
ON DELETE SET NULL;
DELETE FROM branch_types WHERE name LIKE '%-outdated';
SELECT * FROM branches
ORDER BY branch_id;
END