INSERT INTO с подзапросом SELECT COUNT, возвращающим ноль
У меня есть таблица с упражнениями внутри и для каждого упражнения несколько иллюстраций в другой таблице. Я хотел бы вставить иллюстрации и упорядочить их с помощью атрибута 'position'. Поэтому, когда я добавляю иллюстрацию, атрибут 'position' равен количеству иллюстраций для данного упражнения (потому что position начинается с 0).
Итак, я попробовал что-то подобное:
INSERT INTO illustrations (path, date_creation, id_exercise, position)
VALUES (
"2789c0bdda6981fadd87c30af74dfc5d.jpg",
"1384104485",
"4",
(SELECT COUNT(I.id)
FROM illustrations I
WHERE I.id_exercise = 4
GROUP BY I.id_exercise
)
)
Этот запрос работает нормально, но только если у меня уже есть хотя бы одна иллюстрация для упражнения. В противном случае подзапрос возвращает ноль, и я получаю эту ошибку: "Столбец" позиция "не может быть нулевым", что логично. Обычно я ставлю ноль, если подзапрос select возвращает ноль. Я пытался с ISNULL(), но я не нахожу правильный синтаксис. Любое предложение?
1 ответ
Использование COALESCE
изменить нулевой результат подзапроса на значение по умолчанию.
INSERT INTO illustrations (path, date_creation, id_exercise, position)
VALUES (
"2789c0bdda6981fadd87c30af74dfc5d.jpg",
"1384104485",
"4",
COALESCE((SELECT COUNT(I.id)
FROM illustrations I
WHERE I.id_exercise = 4
), 0)
)
Так же GROUP BY
было ненужным.