连接两个表但每个表中记录数不同的问题

时间:2015-09-04 11:59:35

标签: php mysql join

我希望有人能够解决我的问题。

我有两个与客户订单中的产品相关的表格。一个表称为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个查询......

感谢任何帮助,谢谢!

迈克尔

1 个答案:

答案 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;