FROM 在此位置无效,期望 EOF,';'



我是mysql的新手,我一直在尝试遵循一些教程,我遇到了一些错误

UPDATE a 
SET PropertyAddress = IFNULL(a.PropertyAddress,b.PropertyAddress)
FROM nashvillehousing a
JOIN nashvillehousing b
ON a.ParcelID = b.ParcelID
AND a.UniqueID <> b.UniqueID

这里我试图用同一表的同一列重新填充a的PropertyAddress列。但是它显示了错误"FROM在此位置无效,期望EOF, ';'">

我检查了其他解决方案,并将我的查询修改为

UPDATE nashvillehousing a 
JOIN nashvillehousing b
ON a.ParcelID = b.ParcelID
SET a.PropertyAddress = IFNULL(a.PropertyAddress,b.PropertyAddress)
AND a.UniqueID <> b.UniqueID

返回

Error Code: 2013. Lost connection to MySQL server during query  30.000 sec
有谁能帮我一下吗?由于

and应该是where子句

UPDATE nashvillehousing a 
JOIN nashvillehousing b
ON a.ParcelID = b.ParcelID
SET a.PropertyAddress = COALESCE(a.PropertyAddress,b.PropertyAddress)
WHERE a.UniqueID <> b.UniqueID

或者输入join

UPDATE nashvillehousing a 
JOIN nashvillehousing b
ON a.ParcelID = b.ParcelID AND a.UniqueID <> b.UniqueID
SET a.PropertyAddress = COALESCE(a.PropertyAddress,b.PropertyAddress)

您没有提供示例数据,但是您的查询有一个主要问题,即每个parcelId可能有多个具有有效地址的匹配。为了避免这种情况,聚合要匹配的表:

UPDATE nashvillehousing n JOIN
(SELECT ParcelId, MAX(PropertyAddress) as PropertyAddress
FROM nashvillehousing n2
GROUP BY ParcelId
) n2
ON n2.ParcelID = n.ParcelID
SET PropertyAddress = n2.PropertyAddress
WHERE n.PropertyAddress IS NULL AND
n2.PropertyAddress IS NOT NULL;

注意,WHERE子句只更新需要更新的行。

你的第一个查询没有使用MySql语法,这就是为什么你得到错误。

在第二个查询中,您必须移动ON子句中的条件a.UniqueID <> b.UniqueID
此外,由于您想要更新PropertyAddress的值仅为null,您应该为此添加WHERE子句,并删除IFNULL():

UPDATE nashvillehousing a 
JOIN nashvillehousing b
ON a.ParcelID = b.ParcelID AND a.UniqueID <> b.UniqueID
SET a.PropertyAddress = b.PropertyAddress
WHERE a.PropertyAddress IS NULL AND b.PropertyAddress IS NOT NULL;

请注意,如果UniqueID实际上是每一行的唯一id,那么您根本不需要条件a.UniqueID <> b.UniqueID,因为这是由WHERE子句处理的,其中过滤掉了相同行的匹配。

最新更新