SQL:REPLACE INTO语句可以与案例结合使用吗?

时间:2012-03-18 12:18:20

标签: mysql sql

我正在尝试运行替换为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代码显然不起作用。 :(

谢谢!

3 个答案:

答案 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 +"'