SQL if заявление, чтобы исправить проблему - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть этот select

insert into test(t_name)
(select users.first_name || '_' || users.last_name 
|| '_' || to_date($values.report_date, 'YYYY.MM.DD')
from users where users.id = $session.user_id)

, который работает как положено, за исключением того, что я хочу, если users.first_name / users.last_name имеют значение null и user_id = 0, чтобы вставить другую строку 'admin', в противном случае я получаю ошибкупотому что это нарушает ненулевое ограничение для столбца t_name.

Любые предложения приветствуются.Спасибо.

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

Используйте CASE в части SELECT:

insert into test (t_name) 
select case 
         when users.first_name is null and users.last_name is null and users.id=0 then 'admin'
         else users.first_name || '_' || users.last_name || '_' || to_date($values.report_date,'YYYY.MM.DD')
       end 
from users
where users.id = $session.user_id

Из вопроса (для меня) не ясно, должны ли все упомянутые вами условия быть верными или только одно из них.В зависимости от того, что вы хотите, вы должны изменить AND s на OR s в первой WHEN части.

(Обратите внимание, что нет необходимости заключать SELECT в () дляINSERT ... SELECT заявление)

1 голос
/ 02 апреля 2012

Если вы используете MySQL, вы можете использовать IFNULL.

INSERT INTO test(t_name)
(
    SELECT IFNULL(users.first_name || '_' || users.last_name || '_' || to_date($values.report_date, 'YYYY.MM.DD'), 'admin')
    FROM users
    WHERE users.id = $session.user_id
)

В MSSQL есть аналогичная функция ISNULL, я предполагаю, что аналогичные решения существуют и для других систем баз данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...