Эквивалентный код MySQL для следующего кода SQL Server?

#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
  • Укажите имя обновляемого столбца.