sql >> Database >  >> RDS >> Mysql

Opgeslagen MYSQL-procedure voor updatevariabelen is 0

Het probleem is dat de procedureparameter dezelfde naam heeft als een kolom in de tabellen. Wanneer u verwijst naar propertyid in de query's gebruikt het de kolom, niet de parameter. Kolom- en variabelenamen zijn niet hoofdlettergevoelig, dus het maakt niet uit of u een van deze PropertyID hebt gespeld en de andere propertyId .

Gebruik een andere naam voor de parameter, b.v. p_propertyId

Er zijn ook geen twee vragen nodig, je kunt het in één doen met een 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

Merk op dat het gebruik van LIMIT zonder ORDER BY betekent dat de geselecteerde rij onvoorspelbaar is.




  1. Een applicatiedatabase agnostisch houden (ADO.NET versus inkapseling van DB-logica)

  2. Logische MySQL-operators

  3. MySQL Update Inner Join tabellen-query

  4. MySQL Galera Cluster 4.0 implementeren op Amazon AWS EC2