我正在尝试运行一个replace into DB调用,但我只希望它在提供的printerid#大于数据库存储的printerid#时执行。
这是我的示例代码,希望它能理解这个
unitid = 2382;
printerid = 9826;
REPLACE INTO devices (unitid, printerid)
VALUES ('"+ unitid +"', '"+ printerid +"')
WHILE '"+printerid+"' > devices.printerid
例如,如果设备数据库已经有一个打印机ID为9999的united 2382条目,那么SQL调用应该什么都不做,但如果它的打印机ID为8888,它会用我的新打印机ID 9826替换它。
上面列出的SQL代码显然不起作用(
谢谢!
您也可以使用INSERT INTO ... ON DUPLICATE KEY
,假设您在unitid
:上有一个主/唯一密钥
INSERT INTO devices (unitid, printerid)
VALUES ('"+ unitid +"', '"+ printerid +"')
ON DUPLICATE KEY UPDATE devices
SET unitid = '"+ unitid +"', printerid = '"+ printerid +"'
WHERE unitid = '"+ unitid +"' AND printerid < '"+ printerid +"'
根据文档,您可以使用replace into ... select
。这将允许您使用子查询验证新的printerid
是否大于旧的
replace into devices
(unitid, printerid)
select '"+ unitid +"'
, '"+ printerid +"'
where not exists
(
select *
from devices
where unitid = '"+ unitid +"'
and printerid >= '"+printerid+"'
)
使用INSERT ... ON DUPLICATE KEY UPDATE
时,可以使用VALUES()引用尝试插入的值-
INSERT INTO
devices (unitid, printerid)
VALUES (2382, 9826)
ON DUPLICATE KEY UPDATE
printerid = IF(VALUES(printerid) > printerid, VALUES(printerid), printerid)