Повторноеиспользование таблицы При соединении нескольких таблиц может обнаружиться, что требует
ся неоднократно соединять одну и ту же таблицу. В нашем примере БД
внешние ключи к таблице
branch
присутствуют как в таблице
account
(отделение, в котором был открыт счет), так и в таблице
employee
(отде
ление, в котором работает сотрудник). Если в результирующий набор
должны войти
оба отделения, таблицу
branch
можно включить в блок
from
дважды, в первый раз соединив ее с таблицей
employee
, а второй
раз – с таблицей
account
. Это сработает, если каждому экземпляру таб
лицы
branch
присвоить свой псевдоним, чтобы сервер знал, на какой
экземпляр делается ссылка:
mysql>
SELECT a.account_id, e.emp_id, > b_a.name open_branch, b_e.name emp_branch > FROM account a INNER JOIN branch b_a > ON a.open_branch_id = b_a.branch_id > INNER JOIN employee e > ON a.open_emp_id = e.emp_id > INNER JOIN branch b_e > ON e.assigned_branch_id = b_e.branch_id > WHERE a.product_cd = 'CHK'; +++++
| account_id | emp_id | open_branch | emp_branch |
+++++
| 8 | 1 | Headquarters | Headquarters |
| 12 | 1 | Headquarters | Headquarters |
| 17 | 1 | Headquarters | Headquarters |
| 1 | 10 | Woburn Branch | Woburn Branch |
| 4 | 10 | Woburn Branch | Woburn Branch |
| 6 | 13 | Quincy Branch | Quincy Branch |
| 11 | 16 | So. NH Branch | So. NH Branch |
| 15 | 16 | So. NH Branch | So. NH Branch |
| 20 | 16 | So. NH Branch | So. NH Branch |
| 23 | 16 | So. NH Branch | So. NH Branch |
+++++
10 rows in set (0.07 sec)
Этот запрос показывает, кто открыл каждый текущий счет, в каком от
делении это произошло и к какому отделению приписан в настоящее
время сотрудник, открывший счет. Таблица
branch
включена дважды
под псевдонимами
b_a
и
b_e
. Благодаря присваиванию разных псевдо
нимов каждому экземпляру таблицы
branch
, сервер сможет определить
экземпляр, на который делается ссылка, – соединенный с таблицей