У меня есть база данных, которая позволяет вести все обмены продуктами между разными магазинами. Вот таблицы:
Таблица доставки:
+-------------+-----------+----------------+---------+
| delivery_id | origin_id | destination_id | ongoing |
+-------------+-----------+----------------+---------+
| 15 | 1 | 2 | 1 |
| 16 | 3 | 4 | 0 |
+-------------+-----------+----------------+---------+
Таблица сайта:
+---------+------------+----------------+
| site_id | name | address |
+---------+------------+----------------+
| 1 | site_1 | ... |
| 2 | site_2 | ... |
+-------------+--------+----------------+
Идентификаторы отправителя и получателя являются внешними ключами, ссылающимися на site_id.
Моя цель - перечислить все текущие поставки с названиями магазинов отправления и назначения. Для приведенного выше примера ожидаемый результат будет:
+---------+------------+
| origin |destination |
+---------+------------+
| site_1 | site_2 |
+---------+------------+
На данный момент я нашел единственный способ выбрать идентификаторы пункта назначения и источника с соответствующим идентификатором доставки и затем объединить эти два результата:
SELECT origin.origin, destination.destination FROM
(SELECT site.name AS origin,delivery.delivery_id FROM delivery INNER JOIN site on site.site_id=delivery.origin_id WHERE delivery.ongoing=1) origin
INNER JOIN (SELECT site.name as destination,delivery.delivery_id FROM delivery INNER JOIN site ON site.site_id=delivery.destination_id WHERE delivery.ongoing=1) destination
ON origine.code=destination.code
Я почти уверен, что есть более простой и эффективный способ сделать это, но я не могу его найти. Кто-нибудь может подтвердить?