つなぎ合わせるテーブル3つは下記のとおりです。
受注一覧テーブル
SELECT * FROM order_master;
+----+------------+-----------+
| id | product_id | vendor_id |
+----+------------+-----------+
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 3 | 4 | 3 |
| 4 | 3 | 2 |
+----+------------+-----------+
商品一覧テーブル
SELECT * FROM product_master;
+----+----------------+
| id | product_name |
+----+----------------+
| 1 | 調味料A |
| 2 | 調味料B |
| 3 | 佃煮 |
| 4 | コーンフレーク |
+----+----------------+
配送業者テーブル
SELECT * FROM vendor_master;
+----+-------------+---------------------+
| id | vendor_name | contract_date |
+----+-------------+---------------------+
| 1 | 東京配送 | 2017-03-03 00:00:00 |
| 2 | なにわ屋 | 2017-05-03 00:00:00 |
| 3 | 桃山Express | 2018-03-03 00:00:00 |
+----+-------------+---------------------+
① 配送業者テーブル(vendor_master)から、有効期限内である業者からの受注情報を取得します。有効期限を判定するには、配送業者テーブル(vendor_master)の contract_date が今日よりも大きい日付であることを調べます。
② ①の結果取得される配送業者テーブル(vendor_master)を、RIGHT OUTER JOIN で受注一覧テーブル(order_master)と結合します。
③ ②の結果と商品一覧テーブル(product_master)を結合します。
SQL 文はこちらです。
SELECT
o.id '注文 ID'
,o.product_id '商品 ID'
,p.product_name '商品名'
,v.vendor_name '配送業者'
FROM
order_master o
RIGHT OUTER JOIN /*②の処理*/
(SELECT id, vendor_name FROM vendor_master WHERE contract_date > CURDATE()) v /*①の処理*/
ON
o.vendor_id = v.id
JOIN /*③の処理*/
product_master p
ON
o.product_id = p.id
;