Lavorare su un sistema di gestione dell'inventario, e noi abbiamo le seguenti tabelle:Auto partecipare Solo tornando un record
================================================
| orders | order_line_items | product_options |
|--------|-------------------|-----------------|
| id | id | id |
| start | order_id | name |
| end | product_option_id | |
| | quantity | |
| | price | |
| | event_start | |
| | event_end | |
================================================
sto cercando di calcolare l'inventario in una certa data, quindi ho bisogno di fare un self join per confrontare la quantità su order_line_items con la SOMMA della quantità di altri record in order_line_items con lo stesso product_option_id e dove l'evento di inizio e fine si trova in un intervallo.
Quindi, data una data 2016/01/20, ho:
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;
i rendimenti 127 di cui sopra le righe
Quando provo a fare un auto join, in questo modo:
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;
Restituisce solo 1 record. Come si può vedere qui:() ci sono un sacco di record con la stessa product_option_id quindi questa ultima query deve essere restituisce un sacco di righe
Un suggerimento, è necessario rinominare la seconda tabella, perché il sistema può confondere e non è necessario il secondo dove, poiché ne esiste uno nella query secondaria. –
Grazie - rimuovendo il secondo in cui ho ottenuto più record, ma ora tutti i record restituiti hanno lo stesso product_option_id .. strano: https: // goo.gl/itL5bF – Laravelian
ok, prova questo in opzione 'join',' order_id = other_order_id e production_order_id = other_production_order_id' –