所以我有这个insert语句,在设置number1&number2列。我在insert语句的values部分使用了case-when语句。在设置这两列时,有没有更好的方法可以在不重复代码的情况下做到这一点。
INSERT INTO history (
user_id
,number1
,number2
)
VALUES (
'user1'
,CASE
WHEN (
SELECT user_id
FROM old_history
WHERE user_id = 'user1'
) IS NOT NULL
THEN 12.3
ELSE NULL
END
,CASE
WHEN (
SELECT user_id
FROM old_history
WHERE user_id = 'user1'
) IS NOT NULL
THEN 15
ELSE NULL
END
);
谢谢。
当没有匹配时,聚合函数可以方便地返回NULL
。所以,我认为这是最简单的方法:
INSERT INTO history (user_id, number1, number2)
SELECT 'user1', MAX(12.3), MAX(15)
FROM old_history
WHERE user_id = 'user1';
聚合函数MAX()
的使用使其成为一个聚合查询,保证返回1行。当不存在匹配行时,第二列和第三列是NULL
。
试试这个:
INSERT INTO history (user_id, number1, number2)
SELECT
'user1'
, case when count(1)=1 then 12.3 end
, case when count(1)=1 then 15 end
FROM old_history
WHERE user_id = 'user1';