Могу ли я исключить один 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
Другие вопросы по тегам