0

我有来自在线 SQL Server 教程的代码。我需要将其转换为 MySql。我已经更改ISNULLifnull,但我仍然有来自问题标题的错误:

UPDATE a 
SET PropertyAddress = ifnull(a.PropertyAddress, b.PropertyAddress)
FROM Nashvillehousing as a 
JOIN Nashvillehousing as b
    ON a.ParcelID = b.ParcelID
    AND a.UniqueID <> b.UniqueID
WHERE a.PropertyAddress IS NULL;

如何解决此问题以在 MySql 上运行?

4

2 回答 2

0

您不需要为此加入。

UPDATE nashvillehousing 
SET propertyaddress = 
(
  SELECT ANY_VALUE(src.propertyaddress)
  FROM (select * from nashvillehousing) src
  WHERE src.parcelid = nashvillehousing.parcelid
  AND src.uniqueid <> nashvillehousing.uniqueid
)
WHERE propertyaddress IS NULL;

我不得不写FROM (select * from nashvillehousing) src而不是仅仅写一个FROM nashvillehousing src. 这是由于 MySQL 的限制,您无法直接从要更新的同一个表中进行选择。

原始语句假定您最多可以找到两行parcelid。这通常不能保证是这种情况,所以我投入以ANY_VALUE确保安全。(如果你更喜欢这个,你当然也可以使用MINMAX在这里。)

于 2022-03-02T16:35:57.720 回答
-1

在 UPDATE 中使用 JOIN 的 MySql 语法与 SQL Server 不同。我不经常为 MySql 写这个,但我认为你想要这个:

UPDATE Nashvillehouse as a 
INNER JOIN Nashvillehouse as b 
    ON a.ParcelID = b.ParcelID
    AND a.UniqueID <> b.UniqueID
SET a.PropertyAddress = ifnull(a.PropertyAddress, b.PropertyAddress)
WHERE a.PropertyAddress IS NULL;
于 2022-03-02T16:15:22.623 回答