我在我的数据库上运行一个非常简单的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日,它会一直重复,直到我取消查询。
有关预防此事的任何帮助吗?
答案 0 :(得分:6)
您正在加入所有这些表:database.DELIVERY
,database.ITEM_MASTER
,database.MINOR_ITEM_CLASS
和database.MAJOR_ITEM_CLASS
- 而不指定 如何加入它们。您需要指定这些表与其余表的连接方式。
如果每个表只有100行,它将为您提供100 * 100 * 100 * 100行(1亿)最小行! (见Cartesian Join)
答案 1 :(得分:0)
您尚未加入所有表格。例如,表MINOR_ITEM_CLASS,database.MAJOR_ITEM_CLASS& database.ITEM_MASTER缺少连接。缺少连接会导致查询引擎对未明确连接的表执行笛卡尔连接。所以你没有无限循环,你只需要许多相同记录的副本。最终您的查询将停止。
为这些表添加适当的连接&让我们怎么样。您也可以尝试添加DISTINCT关键字。