完全に定義されたアイテムを含むテーブルと、このパラメーターに使用可能なすべての値が NULL に必要なため、あいまい/貪欲な注文の可能性がある 2 つ目のテーブルがあります。
items
+-----------------------+
| item_id | color | size |
|---------+-------+------|
| 1 | blue | 8 |
| 2 | red | 6 |
| 3 | green | 7 |
| 4 | black | 6 |
+------------------------+
orders
+-------------------------+
| order_id | color | size |
|----------+-------+------|
| 1 | red | 6 |
| 2 | green | 8 |
| 3 | NULL | 6 |
| 4 | blue | NULL |
| 5 | NULL | NULL |
+-------------------------+
すべての注文を満たすために必要なアイテムの完全なリストを生成する効率的な方法はありますか?
+--------------------+
| order_id | item_id |
|----------+---------|
| 1 | 2 |
| 3 | 2 |
| 3 | 4 |
| 4 | 1 |
| 5 | 1 |
| 5 | 2 |
| 5 | 3 |
| 5 | 4 |
+--------------------+
INNER JOIN がこれを行うことができるように思えますが、このようなものは明らかに、注文テーブルの貪欲なワイルドカードとして NULL 値の可能性を考慮していません。
SELECT order_id, item_id
FROM orders
INNER JOIN items ON orders.color = items.color AND orders.size = items.size
何か案は?