#mysql #sql #sql-server
Вопрос:
Я выполнил самостоятельное объединение в таблице nashvillehousing, чтобы заменить нулевые значения в столбце PropertyAddress, обнаружив, что каждое уникальное значение PropertyAddress имеет уникальное значение ParcelID.
В онлайн-учебнике, которому я следую, используется SQL Server. К сожалению, я не могу установить его на свой компьютер.
Я пытаюсь найти эквивалентный код MySQL для следующего кода SQL Server.
UPDATE a
SET PropertyAddress = ISNULL(a.PropertyAddress, b.PropertyAddress)
FROM projectportfolio.nashvillehousing a
JOIN projectportfolio.nashvillehousing b
ON a.ParcelID = b.ParcelID
AND a.UniqueID != b.UniqueID
WHERE a.PropertyAddress IS NULL
Комментарии:
1. ПОДУМАЙТЕ о своем коде. Если вы фильтруете строки, выбранные из a, на основе NULL, то нет веских причин использовать ISNULL при установке значения. a.PropertyAddress всегда будет равен NULL, и вы хотите перезаписать его тем, что содержит b.PropertyAddress. Однако вы ДОЛЖНЫ игнорировать строки, в которых b.PropertyAddress также равен НУЛЮ, поскольку это логически ничего не меняет. Правило для изучения — не выполняйте бессмысленные обновления.
Ответ №1:
Это должно сработать:
UPDATE a
SET PropertyAddress = IFNULL(a.PropertyAddress, b.PropertyAddress)
FROM projectportfolio.nashvillehousing a
JOIN projectportfolio.nashvillehousing b
ON a.ParcelID = b.ParcelID
AND a.UniqueID <> b.UniqueID
WHERE a.PropertyAddress IS NULL
Ответ №2:
В MySQL это было бы:
UPDATE projectportfolio.nashvillehousing nh JOIN
projectportfolio.nashvillehousing nh1
ON nh1.ParcelID = nh.ParcelID AND
nh1.UniqueID <> nh.UniqueID
SET nh.PropertyAddress = nh1.PropertyAddress
WHERE nh.PropertyAddress IS NULL;
Обратите внимание на дополнительные изменения в запросе:
- Использование значимых псевдонимов таблиц, а не произвольных букв.
- Избавляюсь от
ISNULL()
… илиCOALESCE()
. В этом нет необходимости из-за пункта.WHERE
- Укажите имя обновляемого столбца.