2014-02-18 6 views
1

Я пытаюсь предотвратить результаты комплексного подвыбора, который используется как часть более крупного оператора INSERT, от NULL. Значение поля должно быть пустой строкой вместо NULL.Именование комплекса sub-select «as» в случае case

В целом, вставка выглядит примерно так:

INSERT INTO record (id,field1,field2) VALUES (val1,val2,<complex select>); 

Чтобы предотвратить сложный выбор от того, NULL я могу использовать:

SELECT CASE WHEN <complex select> THEN <complex select> else '' end as b 

Проблема заключается в том, что я не хочу повторять сложный выбор, поскольку он делает запрос в два раза большим, трудно читается, подвержен ошибкам, если запрос нужно слегка изменить и т. д., поэтому я хотел бы назвать результат выбора, чтобы я мог просто ссылаться на значение вместо , Но когда я пытаюсь сделать это, я получаю сообщение об ошибке:

SELECT CASE WHEN <complex select> as a THEN a else '' end as b 

или

SELECT CASE WHEN (<complex select> as a) THEN a else '' end as b 

Ошибка является:

near "as": syntax error 

ответ

1

Вы можете дать столбец комплекса выбрать имя, но чтобы получить значение из подзапроса, вы должны использовать другой ВЫБОР:

INSERT INTO record (id,field1,field2) 
VALUES (val1, 
     val2, 
     (SELECT CASE WHEN a THEN a else '' END 
     FROM (SELECT ... AS a FROM ...) 
     ); 

(. Сам подзапрос может быть дано имя, но это здесь не имеет значения)

Однако, чтобы преобразовать значение NULL в пустую строку, вы можете просто использовать IFNULL function:

INSERT INTO record (id,field1,field2) 
VALUES (val1, 
     val2, 
     IFNULL((SELECT ...), '') 
     ); 
Смежные вопросы