Praca w systemie zarządzania zapasami, a mamy następujące tabele:Własna dołączyć tylko jeden rekord powrocie
================================================
| orders | order_line_items | product_options |
|--------|-------------------|-----------------|
| id | id | id |
| start | order_id | name |
| end | product_option_id | |
| | quantity | |
| | price | |
| | event_start | |
| | event_end | |
================================================
próbuję obliczyć inwentaryzacji w określonym terminie, więc muszę zrobić własny przyłączyć porównywanie ilości na order_line_items z SUM z ilością innych rekordów w order_line_items z tym samym product_option_id, i gdzie początek i koniec zdarzenia są w zakresie.
więc, biorąc pod uwagę datę 20.01.2016, mam:
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;
Powyższe zwraca 127 wierszy
Kiedy próbuję zrobić własny dołączyć, tak:
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;
Powoduje tylko zwrot 1 rekordu. Jak widać tutaj:() istnieje wiele rekordów z tym samym product_option_id więc to ostatnie zapytanie należy powracającego dużo wierszy
Sugestia, należy zmienić nazwę drugiej tabeli, ponieważ system może mylić i nie potrzebować drugiego miejsca, w którym jest, ponieważ masz go w sub zapytania. –
Dzięki - usunięcie drugiego, w którym dostałem więcej rekordów, ale teraz wszystkie zwrócone rekordy mają ten sam product_option_id .. weird: https: // goo.gl/itL5bF – Laravelian
ok, spróbuj tego w opcji 'join',' order_id = other_order_id i production_order_id = other_production_order_id' –