2012-03-18 75 views
2

我想运行一个替换到数据库调用,但我只希望它执行,如果提供的printerid#大于数据库存储的printerid#。SQL:REPLACE INTO语句可以与案例结合使用?

这里是我的示例代码,希望使得这个

unitid = 2382; 
printerid = 9826; 

REPLACE INTO devices (unitid, printerid) 
VALUES ('"+ unitid +"', '"+ printerid +"') 
WHILE '"+printerid+"' > devices.printerid 

因此,举例来说,如果设备数据库已经为单元ID 2382具有9999打印机ID的条目,那么SQL调用应该感什么也不做,但是如果它的打印机ID是8888,它会用我的新打印机ID为9826来代替它。

上面列出的SQL代码虽然很明显不起作用。 :(

感谢

回答

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 +"' 
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+"' 
     ) 
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)