2012-03-18 24 views
2

私はDB呼び出しに代入を実行しようとしていますが、指定されたprinterid#がデータベース格納のprinterid#より大きい場合にのみ実行します。ここで SQL:REPLACE INTOステートメントをケースと組み合わせることはできますか?

がうまくいけば、この

unitid = 2382; 
printerid = 9826; 

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

デバイスのデータベースはすでに9999のプリンタIDを持っているUNITID 2382のエントリを持っているのであれば、例えば、その後、SQL呼び出しがすべきの理にかなって私のコード例であります何もしませんが、プリンタIDが8888の場合、新しいプリンタID 9826に置き換えられます。

上記のSQLコードは明らかに機能しません。 :(

おかげ

答えて

0

unitidにプライマリ/ユニークキーがあると仮定してINSERT INTO ... ON DUPLICATE KEYを使用することもできます。

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) 
関連する問題