Вам нужно включить неделю в объединения, чтобы вы просто получали данные этой недели из каждой таблицы.
SELECT p1.product, p2.week,
p2.sales, p2.QTY,
p3.sales, p3.QTY,
p4.sales, p4.QTY
FROM products_table p1
INNER JOIN aplha_sales p2 ON p1.alpha_product_id = p2.alpha_product_id
INNER JOIN beta_sales p3 ON p1.beta_product_id = p3.beta_product_id AND p3.week = p2.week
INNER JOIN delta_sales p4 ON p1.delta_id = p4.delta_product_id AND p4.week = p2.week
WHERE p2.week >= '2019-04-19';
Обратите внимание, что это приведет к появлению строк только для тех недель, когда все 3 продукта имели продажи,Вы можете использовать LEFT JOIN
, чтобы сделать продажи необязательными для 2 таблиц.Но чтобы сделать его необязательным для всех таблиц 3 XXX_sales
, необходимо объединить его с другой таблицей, определяющей нужные вам недели, а затем LEFT JOIN
со всеми таблицами продаж.
SELECT p1.product, w.week,
p2.sales, p2.QTY,
p3.sales, p3.QTY,
p4.sales, p4.QTY
FROM products_table p1
CROSS JOIN (
SELECT week FROM alpha_sales WHERE week >= '2019-04-19'
UNION
SELECT week FROM beta_sales WHERE week >= '2019-04-19'
UNION
SELECT week FROM delta_sales WHERE week >= '2019-04-19') AS w
LEFT JOIN aplha_sales p2 ON p1.alpha_product_id = p2.alpha_product_id AND p2.week = w.week
LEFT JOIN beta_sales p3 ON p1.beta_product_id = p3.beta_product_id AND p3.week = w.week
LEFT JOIN delta_sales p4 ON p1.delta_id = p4.delta_product_id AND p4.week = w.week
UNION
в подзапросе будут объединены все недели, которые есть в любой из таблиц продаж.По умолчанию UNION
удаляет дубликаты, поэтому вы не получите несколько строк для каждой недели.