В условии соединения таблиц можно использовать произвольное количество логических выражений (как в предложении WHERE
).
Например, получим информацию о должностях произвольных 5-ти сотрудников:
SELECT e.first_name,
e.last_name,
r.rank_id,
r.store_id,
r.name as rank_name
FROM employee e
JOIN rank r
ON r.rank_id = e.rank_id
AND r.store_id = e.store_id
LIMIT 5
first_name | last_name | rank_id | store_id | rank_name |
---|---|---|---|---|
Алексей | Иванов | CHIEF | 100 | Директор |
Любовь | Блинова | SELLER | 100 | Продавец |
Глеб | Тарасов | MANAGER | 100 | Менеджер |
Петр | Корсаков | CEO | 201 | Директор |
Никки | Зайцева | MANAGER | 201 | Менеджер |
Обрати внимание на условие соединения таблиц employee e
и rank r
ON r.rank_id = e.rank_id
AND r.store_id = e.store_id
Почему мы использовали два столбца? Ответ на вопрос можно найти в описании таблицы rank
:
В каждом магазине своя иерархия сотрудников. ... Запись в rank идентифицируется составным суррогатным ключом (store_id, rank_id).
Т.е. чтобы найти информацию о должности сотрудника, нужно из таблицы rank
взять строку с таким же идентификатором магазина и идентификатором должности в магазине.
В условии соединения могут использоваться и другие логические операторы:
AND
- логическое И;OR
- логическое ИЛИ;NOT
- отрицание.