上的庫存管理系統的工作,我們有如下表:自連接只返回一個記錄
================================================
| orders | order_line_items | product_options |
|--------|-------------------|-----------------|
| id | id | id |
| start | order_id | name |
| end | product_option_id | |
| | quantity | |
| | price | |
| | event_start | |
| | event_end | |
================================================
我試圖來計算某一特定日期的庫存,所以我需要一個自聯接將order_line_items上的數量與具有相同product_option_id的order_line_items中的其他記錄數量的SUM進行比較,以及事件開始和結束在某個範圍內的位置。
所以,對於一個日期2016年1月20日,我有:
SELECT order_line_items.id, order_line_items.product_option_id, order_line_items.order_id FROM order_line_items
WHERE order_line_items.event_end_date >= '2016-01-20 04:00:00'
AND order_line_items.event_start_date <= '2016-01-21 04:00:00'
AND order_line_items.product_option_id IS NOT NULL;
以上的回報127行
當我嘗試做一個自我加入,就像這樣:
SELECT
order_line_items.id,
order_line_items.product_option_id,
order_line_items.order_id,
order_line_items.quantity,
other_line_items.other_product_option_id,
other_line_items.other_order_id,
other_line_items.other_quantity,
other_line_items.total
FROM order_line_items
JOIN (
SELECT
id,
product_option_id AS other_product_option_id,
order_id AS other_order_id,
quantity AS other_quantity,
SUM(quantity) total
FROM order_line_items
WHERE order_line_items.event_end_date >= '2016-01-20 04:00:00'
AND order_line_items.event_start_date <= '2016-01-21 04:00:00'
) other_line_items ON order_line_items.product_option_id = other_line_items.other_product_option_id
WHERE order_line_items.event_end_date >= '2016-01-20 04:00:00'
AND order_line_items.event_start_date <= '2016-01-21 04:00:00'
AND order_line_items.product_option_id IS NOT NULL;
它只返回1條記錄。正如你在這裏看到的:()有相同的product_option_id有很多記錄,所以這最後一個查詢應該返回很多行
一個建議,你需要重命名第二個表,因爲系統可能會混淆,並且不需要第二個地方,因爲你在子查詢中有一個。 –
謝謝 - 刪除第二個讓我獲得更多記錄的地方,但現在所有返回的記錄都有相同的product_option_id ..奇怪:https:// goo。gl/itL5bF – Laravelian
好吧,在'join'選項中試試這個,'order_id = other_order_id和production_order_id = other_production_order_id' –