Я бы предпочел сделать это в 2 запроса.
Для меня обновления или вставки они отличаются БИЗНЕС логики. Чтобы ваш код был чистым и понятным, лучше явно определить логику для INSERT и UPDATE.
И технически я не вижу способа Clean сделать это в одном операторе SQL. Каждый оператор должен начинаться с «глагола», это либо «ОБНОВЛЕНИЕ», либо «ВЫБОР», либо «УДАЛЕНИЕ», либо что-то еще. Или, если вы настаиваете на этом, вы можете попробовать удалить существующий существующий, прежде чем выполнять «вставку», затем вы все равно выполните «вставку», но тогда, возможно, вы получите несовместимый идентификатор для той же сущности, что может вызвать проблемы .
Или, если «id» является первичным ключом, еще один глупый способ - «обновлять» в любом случае, а потом «вставлять». Если действительный идентификатор отсутствует, обновление завершится неудачно, и вставка будет выполнена успешно. Если есть действительный идентификатор, обновление будет выполнено успешно, а вставка не удастся. Вы сделаете это без логики BUSINESS if-else, но каждый раз будет происходить сбой SQL, который IS глуп и уродлив.
Это почти то, о чем я могу думать.