Le problème est que le paramètre de procédure porte le même nom qu'une colonne dans les tables. Lorsque vous faites référence à propertyid
dans les requêtes, il utilise la colonne, pas le paramètre. Les noms de colonne et de variable sont insensibles à la casse, donc peu importe que vous épeliez l'un d'entre eux PropertyID
et l'autre propertyId
.
Utilisez un nom différent pour le paramètre, par ex. p_propertyId
De plus, il n'y a pas besoin de deux requêtes, vous pouvez le faire en une seule avec un JOIN
.
UPDATE sales.florida AS s
CROSS JOIN (
SELECT *
FROM annuals.florida
WHERE propertyId = p_propertyId
LIMIT 1) AS a
SET s.SitusLongitude = a.SitusLongitude, s.SitusLatitude = a.SitusLatitude
WHERE s.PROPERTYUNIQUEID = p_propertyId
Notez que l'utilisation de LIMIT
sans ORDER BY
signifie que la ligne sélectionnée sera imprévisible.