我有一个包含完美定义的项目的表和第二个表,其中可能包含模糊/贪婪的订单,因为 NULL 需要此参数的所有可用值。
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
有任何想法吗?