2

SQLステートメントのJoinに関連していると思われる問題が発生しています。

select s.customer as 'Customer', 
    s.store as 'Store', 
    s.item as 'Item', 
    d.dlvry_dt as 'Delivery', 
    i.item_description as 'Description', 
    mj.major_class_description as 'Major Description', 
    s.last_physical_inventory_dt as 'Last Physical Date', 
    s.qty_physical as 'Physical Qty', 
    s.avg_unit_cost as 'Unit Cost', 
    [qty_physical]*[avg_unit_cost] as Value 
from argus.DELIVERY d 
join argus.STORE_INVENTORY s 
    ON (s.store = d.store)
join argus.ITEM_MASTER i 
    ON (s.item = i.item)
join argus.MINOR_ITEM_CLASS mi 
    ON (i.minor_item_class = mi.minor_item_class)
join argus.MAJOR_ITEM_CLASS mj 
    ON (mi.major_item_class = mj.major_item_class)
where s.last_physical_inventory_dt between '6/29/2011' and '7/2/2012' 
    and s.customer = '20001' 
    and s.last_physical_inventory_dt IS NOT NULL

1つのレコードのコピーが無限にあるように見えます。これらのテーブルを結合する方法に何か問題がありますか?

4

1 に答える 1

1
join argus.MINOR_ITEM_CLASS mi 
    ON (i.minor_item_class = mi.minor_item_class)
join argus.MAJOR_ITEM_CLASS mj 
    ON (mi.major_item_class = mj.major_item_class)

私の推測では、エラーはこれら 2 つの結合のいずれかにあると思います。JOIN という単語のみを使用すると、少なくとも 1 対 1 のすべてのレコードを返す INNER JOIN を実行しようとしていると見なされます。マイナー アイテム クラスとメジャー アイテム クラスの間には多くの関係があるため、このクエリを実行すると、ほぼすべてのフィールドで重複したレコードが返されますが、メジャー アイテム クラスは異なります。

私は結果を見ます。ほとんどの列には、変更されない繰り返しデータが含まれますが、列の 1 つは行ごとに異なる値になります。行ごとに異なるデータを含む列は、異なる方法で結合する必要がある列であることがわかります。

それ以外の場合は、クエリが正しくフォーマットされていると言えます。

于 2012-06-04T16:47:21.877 に答える