2014-03-31 23 views
0

我必须对sql查询进行一些编辑,因为我需要包含一些额外的数据,起初我认为这是所有排序,直到今天有人下了订单和新查询只返回一种产品,而不是5种产品。这是由于一些产品没有属性。加入的查询的问题取决于客户的订单

新的查询如下:

SELECT op.orders_id, op.products_id, op.products_model, op. products_name, 
    op.final_price, op.products_quantity, opa.products_options_values_id, 
    opa.products_prid 
    FROM orders_products op 
    JOIN orders_products_attributes opa ON op.orders_products_id = opa.orders_products_id 
    WHERE op.orders_id = 21679 

我已经建立了与此相关的数据库信息的SQL小提琴; http://www.sqlfiddle.com/#!2/105ec

原始查询不会返回5个reults预期是:

SELECT op.orders_id, op.products_id, op.products_model, op. products_name, 
    op.final_price, op.products_quantity 
    FROM orders_products op 
    WHERE op.orders_id = 21679 

原来的问题完全与sqlfiddle证明是必需的特定顺序可以在这里找到的数据; Joining two working sql queries gets wrong results - Where am i going wrong

对此查询所做的任何更改仍必须返回前一个提琴中使用的顺序21535的正确结果。

它看起来像是由于使用了引用orders_products_id的JOIN,但如果不需要属性,产品将不在一个表中。

我不能使用orders_id作为连接,因为这给了我错误的结果,根据以前的问题。

任何建议,因为我现在完全卡住了。

感谢

回答

2

我认为你需要一个left join,因为不是所有的产品似乎有属性:

SELECT op.orders_id, op.products_id, op.products_model, op. products_name, 
op.final_price, op.products_quantity, opa.products_options_values_id, 
opa.products_prid 
FROM orders_products op 
LEFT JOIN orders_products_attributes opa ON op.orders_products_id = opa.orders_products_id 
WHERE op.orders_id = 21679 
+0

完美。谢谢。你能解释为什么LEFT JOIN给JOIN一个不同的结果。始终愿意学习如何和为什么。 –

+0

因为您的原始查询过滤掉了没有属性的产品。一个“左连接”保留它们。 –