0

データベースで非常に単純なSQLクエリを実行していますが、同じレコードが何度も返され、無限ループが発生しているようです。明らかな何かが欠けているかもしれませんが、私にはわかりません。クエリは次のとおりです。

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 database.DELIVERY d,
    database.STORE_INVENTORY s,
    database.ITEM_MASTER i,
    database.MINOR_ITEM_CLASS mi,
    database.MAJOR_ITEM_CLASS mj,
    database.STORE_INVENTORY_ADJUSTMENT sa
where sa.store = s.store
    and s.last_physical_inventory_dt between '6/29/2011' and '7/2/2011'
    and s.customer = '20001'
    and s.last_physical_inventory_dt is not null

2011年7月1日に該当するレコードが1つあり、クエリをキャンセルするまでそれが永久に繰り返されます。

これを防ぐための助けはありますか?

4

2 に答える 2

6

database.DELIVERYdatabase.ITEM_MASTERdatabase.MINOR_ITEM_CLASS、および-のすべてのテーブルを結合していますが、それらの結合方法database.MAJOR_ITEM_CLASSを指定していません。これらのテーブルを他のテーブルと結合する方法を指定する必要があります。

これらのテーブルのそれぞれに 100 行しかない場合、100 * 100 * 100 * 100 行 (1 億) の最小行が得られます。(デカルト結合を参照)

于 2012-06-04T13:31:08.320 に答える
0

すべてのテーブルに参加していません。たとえば、テーブルMINOR_ITEM_CLASS、database.MAJOR_ITEM_CLASS、およびdatabase.ITEM_MASTERに結合がありません。結合が欠落していると、クエリエンジンは、明示的に結合されていないテーブルに対してデカルト結合を実行します。したがって、無限ループはなく、同じレコードの複製コピーが多数あるだけです。最終的に、クエリは停止します。

それらのテーブルに適切な結合を追加し、それがどのようになるかを見てみましょう。DISTINCTキーワードを追加してみることもできます。

于 2012-06-04T13:36:37.650 に答える