SQL数据库中的更新表
问题描述:
我想在我的表中添加一列,它将另一列中的某些值映射到新列。 (人口是另一列,我有),这是我一直使用的是什么:SQL数据库中的更新表
UPDATE my_table
SET popmatch2
CASE
WHEN popmatch IN ('MFNR', 'GQNR', 'EWNR', 'MHNR', 'OUTONR', 'OUTADVNR')
THEN popmatch2 IN ('GENERAL', 'GENERAL', 'GENERAL', 'GENERAL', 'ENDEMIC', 'ENDEMIC')
ELSE POPULATION;
这不是工作
答
与您当前语法的主要问题是,你需要分配的popmatach2
列的东西。在这种情况下,分配给CASE
表达式可能有意义。 A CASE
表达式必须返回一个值,而不是一组值,并且每个WHEN
条件都应返回一个值。
UPDATE my_table
SET popmatch2 = CASE WHEN popmatch IN ('MFNR', 'GQNR', 'EWNR') THEN 'GENERAL'
WHEN popmatch IN ('OUTONR', 'OUTADVNR') THEN 'ENDEMIC'
ELSE 'POPULATION' END;
你需要把单引号括起来POPULATION
如果你打算为实现这一目标是一个字符串文字。
答
这是正确的语法:
update my_table
set popmatch2 = (case when popmatch in ('MFNR', 'GQNR', 'EWNR', 'MHNR')
then 'GENERAL'
when popmatch in ('OUTONR', 'OUTADVNR')
then 'ENDEMIC'
else 'POPULATION' -- I'm guessing this is really a string
end);
你想干什么在更新之后有一个commit
,所以更改被提交。
注:
- 的
case
必须有一个end
。 -
then
应该是单个字符串。 - 每个
when
都应该导致返回一个字符串。
ORA-00936:缺少表达 42000/936 - 现在遇到此错误 –
@JDoe重新载入您的页面。 –
人口是我所指的另一个专栏。然而,即使它作为一个字符串它不起作用 –