Несколько условий соединения

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

3.3 Добавляем WHERE

3.5 Использование таблицы несколько раз