Я знаю, что означает это предупреждение, однако в этом случае точно нет нулевых значений.
Результат также кажется правильным, но предупреждение вызывает у меня любопытство (и обеспокоенность), поскольку это означает, что в игре есть что-то, чего я не понимаю.
Предупреждение:
Warning: Null value is eliminated by an aggregate or other SET operation.
Вот утверждение:
UPDATE Contacts
SET IsActiveCampaignClient = 1,
NeedsActiveCampaignSync = 1
FROM (
SELECT dbo.Contacts.ID
FROM dbo.Contacts
LEFT OUTER JOIN dbo.Order_Batches ON dbo.Order_Batches.EnteredByContactID = dbo.Contacts.ID
GROUP BY dbo.Contacts.ID
HAVING (COUNT(dbo.Order_Batches.ID) > 0)
) i
WHERE i.ID = Contacts.ID
Как вы можете видеть, это оператор UPDATE, в котором мне нужно было выполнить некоторую логику соединения, и проблема с оператором COUNT (). Но если я возьму этот вложенный SELECT и запусту его сам, в результате не будет нулевых значений:
ID
37
39
52
54
79
81
Я предполагаю, что есть что-то в том, как работает этот вложенный выбор, что я не понимаю. Я попытался посмотреть на планы выполнения и разобрать это различными способами, чтобы выявить нулевое значение или какую-то другую проблему. Я попытался внести изменения в утверждение, чтобы попытаться получить нулевой результат - не повезло.
Итак, чтобы было ясно, я хотел бы понять, почему это сообщение появляется, но только когда запрос вложен в предложение FROM оператора UPDATE.