我希望有人能够解决我的问题。
我有两个与客户订单中的产品相关的表格。一个表称为order_product,另一个表是order_option。我需要加入这些表格,以便将产品与相关选项相匹配。但是,并非所有产品都有选择权,这就是我的问题所在。
以下是每个表中与我的查询相关的列的列表:
order_product表:
- order_product_id
- ORDER_ID
- 名称
order_option:
- ORDER_ID
- order_product_id
- 名称
- 值
我们假设我有产品A没有选项,产品B有“尺寸”选项。
我目前的陈述是:
SELECT * FROM order_product op
LEFT JOIN order_option o ON o.order_id = op.order_id
WHERE op.order_id = 1
但是,由于订单ID为1在order_option表中,所以它只是将“Size”选项附加到两个产品。
然后我尝试了:
SELECT * FROM oc49_order_product op
LEFT JOIN oc49_order_option o ON o.order_id = op.order_id
WHERE op.order_id = 1 AND op.order_product_id = o.order_product_id
但我只得到产品B的结果,这是唯一一个带有尺寸选项的产品。
基本上,这里唯一的唯一匹配是order_product_id,但由于产品A没有选项,因此order_option表中不存在该产品ID,因此无法获得结果。我想也许我需要某种IF ELSE语句,但我不确定它们在MySQL中是如何工作的。我希望我在这里也不需要2个查询......
感谢任何帮助,谢谢!
迈克尔
答案 0 :(得分:3)
将条件op.order_product_id = o.order_product_id
移至JOIN ON
子句而不是WHERE
SELECT op.* FROM oc49_order_product op
LEFT JOIN oc49_order_option o ON o.order_id = op.order_id
AND op.order_product_id = o.order_product_id
WHERE op.order_id = 1;