我有这个选择
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上的非空约束。
任何建议都表示赞赏。感谢。
答案 0 :(得分:3)
在SELECT部分使用CASE:
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
更改为OR
部分中的WHEN
。
(请注意,无需在()
语句中附加SELECT {/ 1}}
答案 1 :(得分:1)
如果您使用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
函数,我假设同样存在其他数据库系统的解决方案。