0

複数の WHERE 句でフィルタリングする必要がある多くの情報を取得するクエリがあります。ただし、メイン テーブル (この場合は inv_data) がすべての WHERE 句の影響を受けることは望ましくありません。どのテーブルがどの 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 句の影響も受けたくないメイン テーブルです。

ありがとう!

4

1 に答える 1

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
于 2013-01-28T20:51:52.250 に答える