Могу ли я исключить один SELECT в MSSQL из моего предложения WHERE?
У меня есть запрос, который извлекает много необходимой информации, отфильтрованной по нескольким предложениям WHERE. Однако я не хочу, чтобы на мою основную таблицу (в данном случае inv_data) влияли все предложения WHERE. Есть ли способ выбрать, какие таблицы будут затронуты и ГДЕ?
Вот мой текущий запрос:
$query_ats = "SELECT
i.prod_cd as product,
i.descrip as description,
i.in_stock as current_stock,
SUM(p.log_qty) as purchase_order,
SUM(l.order_qty + e.order_qty) as total_so
from
inv_data as i
inner join plog as p
on i.prod_cd = p.prod_cd
inner join ord_log as l
on i.prod_cd = l.prod_cd
inner join ediordlg as e
on i.prod_cd = e.prod_cd
where
i.class_cd = 'ALG7'
AND
dateadd(day, p.EST_DT, '18001228') BETWEEN getdate() and dateadd(day, 14, getdate())
AND
dateadd(day, l.SHIP_DT, '18001228') BETWEEN getdate() and dateadd(day, 14, getdate())
AND
dateadd(day, e.SHIP_DT, '18001228') BETWEEN getdate() and dateadd(day, 14, getdate())
group by
i.prod_cd,
i.descrip,
i.in_stock,
order by
i.prod_cd ASC";
Таблица i (inv_data) - это моя основная таблица, на которую я не хочу влиять ни одним из предложений dateadd.
Спасибо!
1 ответ
Решение
Оставьте внешний присоединиться к условиям и переместите условия в on
пункт:
SELECT i.prod_cd as product,
i.descrip as description,
i.in_stock as current_stock,
SUM(p.log_qty) as purchase_order,
SUM(l.order_qty + e.order_qty) as total_so
from inv_data i left outer join
plog p
on i.prod_cd = p.prod_cd and
dateadd(day, p.EST_DT, '18001228') BETWEEN getdate() and dateadd(day, 14, getdate())
left outer join
ord_log l
on i.prod_cd = l.prod_cd and
dateadd(day, l.SHIP_DT, '18001228') BETWEEN getdate() and dateadd(day, 14, getdate())
left outer join
ediordlg e
on i.prod_cd = e.prod_cd and
dateadd(day, e.SHIP_DT, '18001228') BETWEEN getdate() and dateadd(day, 14, getdate())
where i.class_cd = 'ALG7'
group by i.prod_cd, i.descrip, i.in_stock,
order by i.prod_cd ASC