Ответ 1
Вы также можете ничего не делать.
Это просто информационное сообщение которое требуется в стандарте SQL. Он не имеет вредных последствий.
Причиной для возврата этого сообщения является то, что во время большинства операций в нулях SQL распространяются.
SELECT NULL + 3 + 7
возвращает NULL
(относительно NULL
как неизвестная величина, это имеет смысл, поскольку ? + 3 + 7
также неизвестен)
но
SELECT SUM(N)
FROM (VALUES (NULL),
(3),
(7)) V(N)
Возвращает 10
и предупреждение о том, что пустые значения игнорируются.
Однако это именно семантика, которую вы хотите для типичных запросов агрегирования. В противном случае наличие единственного NULL
означало бы, что агрегации в этом столбце по всем строкам всегда будут давать NULL
, что не очень полезно.
Какой самый тяжелый торт ниже? (Источник изображения, Creative Commons изображение изменено (обрезано и аннотировано) мной)
После того, как третий торт был взвешен, чешуйки сломались, и поэтому нет информации о четвертом, но все же можно было измерить окружность.
+--------+--------+---------------+
| CakeId | Weight | Circumference |
+--------+--------+---------------+
| 1 | 50 | 12.0 |
| 2 | 80 | 14.2 |
| 3 | 70 | 13.7 |
| 4 | NULL | 13.4 |
+--------+--------+---------------+
Запрос
SELECT MAX(Weight) AS MaxWeight,
AVG(Circumference) AS AvgCircumference
FROM Cakes
Возвращает
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| 80 | 13.325 |
+-----------+------------------+
хотя технически невозможно сказать с уверенностью, что 80 был весом самого тяжелого пирога (поскольку неизвестное число может быть больше), приведенные выше результаты обычно более полезны, чем просто возвращение неизвестных.
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| ? | 13.325 |
+-----------+------------------+
Вероятно, вы хотите игнорировать NULL, и предупреждение просто предупреждает вас о том, что это происходит.