То, что я пытаюсь сделать, это сравнить таблицу с другой временной таблицей, а если запись еще не существует, вставьте ее в таблицу. Моя проблема заключается в том, что IF NOT EXIST не кажется правильным. Если я тянуть код врозь У меня есть проблема:SQL Вставить запись, если ее нет
Возвращает 29 результатов:
SELECT *
from NO_STOCK INNER JOIN #no_stock
ON NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE.
Это не возвращает никаких результатов (я бы ожидать, что это вернется 34):
SELECT PRODUCT_CODE
FROM #no_stock
WHERE NOT EXISTS
(SELECT * from NO_STOCK INNER JOIN #no_stock
ON NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE)
Это возвращает 63:
SELECT PRODUCT_CODE
FROM #no_stock
WHERE EXISTS
(SELECT * from NO_STOCK INNER JOIN #no_stock
ON NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE)
пс. с помощью SQL Server 2008 R2
Почему это работает лучше, чем НЕ СУЩЕСТВУЕТ? –
Спасибо, что помогло много! Может ли НЕ использоваться в ситуации, когда я хочу проверить дату? Так что только вставьте, если Код продукта и дата не существуют с текущей датой в той же записи? – user2158168
Нет, NOT IN сравнивает значение одного элемента с результатом оператора SELECT, в котором возвращается один столбец. Если вам нужно проверить наличие нескольких значений, вам лучше вернуться к NOT EXISTS – Melanie