Sql 缺少右括号错误,括号正确

Sql 缺少右括号错误,括号正确,sql,oracle,Sql,Oracle,我正在运行一个SQL查询,只有两个括号,但仍然出现错误“缺少括号”。代码如下所示: Update ALEKWE_CUSTOMER C set recently_purchased = CASE WHEN EXISTS(SELECT * FROM ALEKWE_CUSTOMER_PRODUCT AS D WHERE C.customer_id=D.customer_id) THEN 'Y' ELSE 'N' END; 如果这是针对sq

我正在运行一个SQL查询,只有两个括号,但仍然出现错误“缺少括号”。代码如下所示:

Update ALEKWE_CUSTOMER C
     set recently_purchased = CASE  WHEN EXISTS(SELECT * FROM ALEKWE_CUSTOMER_PRODUCT AS D
            WHERE C.customer_id=D.customer_id) 
            THEN 'Y' ELSE 'N' END;

如果这是针对sql server的,则答案可能是:

Update ALEKWE_CUSTOMER 
set recently_purchased = (CASE WHEN EXISTS(
SELECT * FROM ALEKWE_CUSTOMER_PRODUCT AS D WHERE customer_id=D.customer_id) THEN 'Y' 
ELSE 'N' END);
您还需要将整个
大小写
结构放在括号中。

除此之外,您不能为将要更新的表使用别名。

您不能在此位置使用别名C,您也不需要它:

Update ALEKWE_CUSTOMER 
     set recently_purchased = CASE  WHEN EXISTS(SELECT * FROM ALEKWE_CUSTOMER_PRODUCT AS D
            WHERE ALEKWE_CUSTOMER.customer_id=D.customer_id) 
            THEN 'Y' ELSE 'N' END;
你也不必把这件事放在妄想中

您需要:

Update ALEKWE_CUSTOMER 
     set recently_purchased = CASE  WHEN EXISTS(SELECT * FROM ALEKWE_CUSTOMER_PRODUCT AS D
            WHERE C.customer_id=D.customer_id) 
            THEN 'Y' ELSE 'N' END;
FROM ALEKWE_CUSTOMER C
让你的别名起作用

编辑:

我修改过的语句在Microsoft SQL Server上运行良好
显然,这个问题特定于Oracle SQL

阅读您的评论后,我将Oracle添加到您的标签中,因为您不知道该怎么说。

您应该使用正在使用的数据库为您的问题添加标签。至于你的问题,这个查询看起来还可以。一个问题可能是您正在运行其他代码而没有意识到它,例如此语句之前的文件或winder中的代码。您必须更正现有标记,而不是编写此文章。并查找缺少的/额外的括号,对吗?我已经尝试过这段代码错误仍然会出现,我正在toad Oracle上运行它这是我实际尝试运行的语句:Update ALEKWE_CUSTOMER C set received_purchased=(购买日期介于添加月(SYSDATE,-12)之间时的情况)SYSDATE然后以ALEKWE_CUSTOMER_PRODUCT D结尾,其中C.CUSTOMER_id=D.CUSTOMER_id),它仍然带出右括号error@user3752199:那么您应该将oracle放入标记中。它在Microsoft SQL Server上运行良好(在2008 R2上测试)。@user3752199您仍在使用别名
C
。正如答案告诉你的那样,你真的应该在没有别名的情况下试一试。他说这是给甲骨文的。“不,你不需要把整个案例结构放在偏执论文中。”困惑的是,当我回答时,他没有指定它是哪个数据库。但你是对的,它不需要括号,我只是觉得它更可读。我应该这样说,而不是“需要”。