2012-03-18 18 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)