2013-11-10 3 views
2

У меня есть таблица с упражнениями внутри и для каждого упражнения некоторые иллюстрации в другой таблице. Я хотел бы вставить иллюстрации и сохранить его с атрибутом «position». Итак, когда я добавляю иллюстрацию, атрибут 'position' равен количеству иллюстраций для данного упражнения (поскольку позиция начинается с 0).INSERT INTO с подзапросом SELECT COUNT, возвращающим нуль

Так что я пытался что-то вроде этого:

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 
    ) 
) 

Этот запрос работает нормально, но только если у меня есть уже, по крайней мере одну иллюстрацию для физических упражнений. В противном случае суб-запрос возвращает значение null, и я получаю эту ошибку: позиция «Столбец» не может быть нулевой, что логично. Обычно я бы поставил нуль, если подзапрос select возвращает null. Я пытался использовать ISNULL(), но я не нашел правильного синтаксиса. Любое предложение ?

ответ

3

Используйте 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.

+0

Это работает, если есть две вставки точно в одно и то же время? – xms

Смежные вопросы