我正在尝试运行替换为DB调用,但我只希望它执行,如果提供的printerid#大于数据库存储的printerid#。
这是我的示例代码,希望能理解这个
unitid = 2382;
printerid = 9826;
REPLACE INTO devices (unitid, printerid)
VALUES ('"+ unitid +"', '"+ printerid +"')
WHILE '"+printerid+"' > devices.printerid
因此,例如,如果设备数据库已经有一个打印机ID为9999的unitid 2382的条目,那么SQL调用应该什么也不做,但如果它的打印机ID为8888,它将用我的新替换它打印机ID为9826。
上面列出的SQL代码显然不起作用。 :(
谢谢!
答案 0 :(得分:0)
根据documentation,您可以使用replace into ... select
。这将允许您验证新printerid
是否大于具有子查询的旧replace into devices
(unitid, printerid)
select '"+ unitid +"'
, '"+ printerid +"'
where not exists
(
select *
from devices
where unitid = '"+ unitid +"'
and printerid >= '"+printerid+"'
)
:
{{1}}
答案 1 :(得分:0)
使用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)
答案 2 :(得分:0)
如果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 +"'