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 日,它会永远重复,直到我取消查询。

对防止这种情况有任何帮助吗?

4

2 回答 2

6

您正在加入所有这些表:database.DELIVERYdatabase.ITEM_MASTERdatabase.MINOR_ITEM_CLASSdatabase.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 回答