Более краткий синтаксис для ON DUPLICATE KEY UPDATE, только если выполняется одно условие? - PullRequest
1 голос
/ 23 апреля 2020

Я знаю, что могу сделать что-то вроде

ON DUPLICATE KEY UPDATE 
    exampleColumn1 = IF (exampleCondition = 1, VALUES(exampleColumn1), exampleColumn1),
    exampleColumn2 = IF (exampleCondition = 1, VALUES(exampleColumn2), exampleColumn2),
    exampleColumn3 = IF (exampleCondition = 1, VALUES(exampleColumn3), exampleColumn3),
    # Etc etc

Но так как я каждый раз делаю одну и ту же проверку состояния, наверняка есть более краткий способ написать это? Это было бы особенно хорошо в тех случаях, когда условие немного дольше записывать.

Из того, что я прочитал, кажется возможным, если я напишу для этого функцию, но могу ли я сделать это простым простым запросом?

1 Ответ

1 голос
/ 23 апреля 2020

В двух словах: нет. Синтаксис on duplicate key не поддерживает какую-либо форму фильтрации (условие where и т. возвращаемое значение, которое вы можете использовать в следующих назначениях:

on duplicate key update
    exampleColumn1 = if(@do_update := (exampleCondition = 1), values(exampleColumn1), exampleColumn1),
    exampleColumn2 = if(@do_update, values(exampleColumn2), exampleColumn2),
    exampleColumn3 = if(@do_update, values(exampleColumn3), exampleColumn3)
...