Работаем над системой управления запасами, и у нас есть следующие таблицы:
================================================
| 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 с суммой количества других записей в order_line_items с тем же product_option_id, и где начало и конец события находятся в пределах диапазона.
Итак, учитывая дату 2016-01-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 запись. Как вы можете видеть здесь: (https://goo.gl/BhUYxK) существует множество записей с одинаковым product_option_id, поэтому этот последний запрос должно возвращать много строк
join
,order_id = other_order_id and production_order_id = other_production_order_id
- person Carlos Rodriguez   schedule 21.01.2016