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 было ненужным.

Другие вопросы по тегам