В условии соединения таблиц можно использовать произвольное количество логических выражений (как в предложении 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- отрицание.