2014-03-31 51 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

因爲您的原始查詢過濾掉了沒有屬性的產品。一個「左連接」保留它們。 –