У меня есть база данных Access .mdb. Есть две таблицы с одинаковыми структурами: цены и tmpPrices. Каждая таблица имеет три столбца: [По состоянию на дату std] (Дата / Время), Цена (двойная), 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 минут с использованием версии A, но лишь небольшая ее часть с использованием версии B, и, похоже, она работает правильно , Поэтому я хотел бы понять, что здесь происходит.