Я пытаюсь построить запрос к UPDATE
строке, если она существует, либо обновить другую строку. Я хочу обновить только одну строку каждый раз, когда выполняется запрос. Второй WHERE
предназначен для случая, когда нет возврата из первой части запроса.
Я хочу обновить один атрибут со значением по умолчанию 'null'
. Нет способа использовать открытый ключ, как я видел в других постах ( например, ).
Я могу вернуть нужный кортеж с помощью UNION
, но затем не могу преобразовать выражение в запрос UPDATE
, как требуется:
(SELECT * FROM table
WHERE (foo BETWEEN x-c AND x+c) AND (bar ..) AND column='null' LIMIT 1)
UNION
(SELECT * FROM table
WHERE column='null' LIMIT 1)
LIMIT 1;
Кажется, это всегда возвращает первое WHERE
, если существует, а второе WHERE
.
Я получаю синтаксические ошибки при попытке создать IF-ELSE на основе переменной count:
SET @count=(SELECT COUNT(*) FROM table
WHERE (foo BETWEEN x-c AND x+c) AND (bar ..) AND column='null' LIMIT 1);
IF @count THEN
(UPDATE table SET column='foobar'
WHERE (foo BETWEEN x-c AND x+c) AND (bar ..) AND column='null' LIMIT 1);
ELSE
(UPDATE table SET column='foobar'
WHERE column='null' LIMIT 1);
END IF;
Я также пытался структурировать подзапрос, но безуспешно получал желаемое поведение.
Я обеспокоен тем, что использование счетчика может привести к возможности для условий гонки? Однако я не уверен, есть ли лучший подход.
Любая помощь очень ценится!