我有这段来自在线Server教程的代码。我需要将它转换为MySql。我已经将ISNULL更改为ifnull,但问题标题中仍然有错误:
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上运行这个问题呢?
发布于 2022-03-02 16:35:57
你不需要加入。
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来获得这个安全。(当然,如果您更喜欢这一点,也可以在这里使用MIN或MAX。)
发布于 2022-03-02 16:15:22
在更新中使用联接的MySql语法与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;https://stackoverflow.com/questions/71325700
复制相似问题