【发布时间】:2011-06-27 19:04:25
【问题描述】:
我有一个 Access .mdb 数据库。有两个结构相同的表:Prices 和 tmpPrices。每个表都有三列:[截至日期标准](日期/时间)、价格(双精度)、CUSIP(文本,255 个字符)。 tmpPrices 包含要添加到价格中的新记录。我有两个 SQL 查询来从 tmpPrices 更新价格,一个使用 WHERE 联接,另一个使用 INNER JOIN。
以下版本 A 可以正常工作:
INSERT INTO [Prices] SELECT * FROM [tmpPrices] WHERE NOT EXISTS
(SELECT * from [Prices]
WHERE ([Prices].[As of date std] = [tmpPrices].[As of date std])
AND ([Prices].CUSIP = [tmpPrices].CUSIP));
而此版本 B 不起作用:
INSERT INTO [Prices] SELECT * FROM [tmpPrices] WHERE NOT EXISTS
(SELECT [Prices].* FROM [Prices] INNER JOIN [tmpPrices] ON
([Prices].[As of Date std] = [tmpPrices].[As of Date std])
AND ([Prices].CUSIP = [tmpPrices].CUSIP));
两个子查询给出相同的结果:来自 tmpPrices 的记录子集已经存在于价格中。
如果不是我必须更新其他表并且使用版本 A 更新另一个表大约需要 45 分钟,但使用版本 B 只是其中的一小部分,并且它似乎可以正常工作,那么使用版本 A 并没有太大关系.所以我想了解这里发生了什么。
【问题讨论】: