SQL: оператор REPLACE INTO можно комбинировать с регистром? - PullRequest
2 голосов
/ 18 марта 2012

Я пытаюсь запустить замену в вызове БД, но я хочу, чтобы он выполнялся только в том случае, если поставляемый printerid # больше, чем хранящаяся в базе данных printerid #.

Вот мой пример кода, который, надеюсь, имеет смыслиз этого

unitid = 2382;
printerid = 9826;

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

Так, например, если в базе данных устройств уже есть запись для unitid 2382 с идентификатором принтера 9999, то вызов SQL ничего не должен делать, но если он имеет идентификатор принтера8888 это заменит мой новый идентификатор принтера 9826.

Выше перечисленный код SQL не работает, хотя, очевидно.: (

Спасибо!

Ответы [ 3 ]

0 голосов
/ 18 марта 2012

При использовании 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)
0 голосов
/ 18 марта 2012

Вы также можете использовать 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 голосов
/ 18 марта 2012

Согласно документации , вы можете использовать replace into ... select. Это позволит вам убедиться, что новый printerid больше старого с подзапросом:

replace into devices 
        (unitid, printerid) 
select  '"+ unitid +"'
,       '"+ printerid +"'
where   not exists
        (
        select  *
        from    devices
        where   unitid = '"+ unitid +"'
                and printerid >= '"+printerid+"'
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...