Я использую Microsoft SQL Server 2012.
Мне нужно обновить записи в одной таблице, основываясь на том, что записи в другой таблице либо отсутствуют, либо имеют логически удаленный флаг.
У меня есть три таблицы: товары, клиенты и цены. Цены ссылки как на ItemID и CustomerID. Записи товаров и клиентов логически удаляются из внешнего источника (а затем удаляются физически). Ценообразование происходит при изменении записей, но не при удалении записей товаров или клиентов.
Я могу использовать левое внешнее объединение для определения записей в Ценообразовании, которые должны быть логически удалены, но я не могу понять, как обновить на основе объединения. Я пытался на основе вопроса, который я нашел здесь,
Это работает и отображает записи, для которых либо запись Предметов больше не существует, либо запись Предметов помечена как логически удаленная.
SELECT p.ItemKey FROM Pricing AS p
LEFT OUTER JOIN Items as i
on p.ItemKey = i.ItemID
WHERE i.ItemID IS NULL OR i.deleted = 'Y'
Отмечает все удаленные записи, а не только те, которые были найдены в предыдущем запросе.
UPDATE Pricing SET deleted = 'Y' WHERE ItemKey IN
(SELECT p.ItemKey FROM Pricing AS p
LEFT OUTER JOIN Items as i
on p.ItemKey = i.ItemID
WHERE i.ItemID IS NULL OR i.deleted = 'Y')
Та же проблема возникает с клиентами и CustomerID.