Sql Oracle Update语句出现ORA-00913错误

Sql Oracle Update语句出现ORA-00913错误,sql,oracle,Sql,Oracle,如果这些条件满足,我正在用值5更新名为sample的表中的两列 1如果表A.MEM_NBR=表B.MEM_NBR和表B.M_ID=XXXX,表B.CLCL=1,最后使用连接条件,如表A.ID=SAMPLE.ID 2如果这些条件不够,那么我们不需要更新表 但是我得到了一个错误 SQL Error: ORA-00913: too many values 00913. 00000 - "too many values". 需要一些关于上述更新脚本的帮助,以了解我的错误所在 我使用的脚本如下: U

如果这些条件满足,我正在用值5更新名为sample的表中的两列

1如果表A.MEM_NBR=表B.MEM_NBR和表B.M_ID=XXXX,表B.CLCL=1,最后使用连接条件,如表A.ID=SAMPLE.ID 2如果这些条件不够,那么我们不需要更新表

但是我得到了一个错误

SQL Error: ORA-00913: too many values 
00913. 00000 - "too many values". 
需要一些关于上述更新脚本的帮助,以了解我的错误所在

我使用的脚本如下:

UPDATE SAMPLE 
SET SAMPLE.PCB = 5, SAMPLE.PCBP_Q = 5 
WHERE (
    SELECT * 
    FROM MEMBER_A A,S_NEW B 
    WHERE A.MEM_NBR = B.MEM_NBR 
        AND B.M_ID = 1111 
        AND B.CLCL = 1 
        AND B.ID = C.ID);

问题是子查询可以返回多个值。要解决此问题,可以使用EXISTS关键字。我还将连接转换为ANSI语法

UPDATE SAMPLE C
SET C.PCB = 5, C.PCBP_Q = 5 
WHERE EXISTS (
    SELECT 1 
    FROM 
        MEMBER_A A
        JOIN S_NEW B 
        ON A.MEM_NBR = B.MEM_NBR 
        AND B.M_ID = 1111 
        AND B.CLCL = 1 
    WHERE 
        A.ID = C.ID);

你的情况可能是错误的。这会导致在不映射的情况下匹配许多值

像这样试试

UPDATE SAMPLE 
SET SAMPLE.PCB = 5, SAMPLE.PCBP_Q = 5 
WHERE ColumnNmae IN (
    SELECT ColumnName 
    FROM MEMBER_A A,S_NEW B 
    WHERE A.MEM_NBR = B.MEM_NBR 
        AND B.M_ID = 1111 
        AND B.CLCL = 1 
        AND B.ID = C.ID);
或者像这样使用相关子查询:

UPDATE SAMPLE 
SET SAMPLE.PCB = 5, SAMPLE.PCBP_Q = 5 
WHERE EXISTS (
    SELECT 1
    FROM MEMBER_A A,S_NEW B 
    WHERE A.MEM_NBR = B.MEM_NBR 
        AND B.M_ID = 1111 
        AND B.CLCL = 1 
        AND B.ID = C.ID
        AND A.ColumnNmae = SAMPLE.ColumnNmaes);

只是一个疑问,子查询是如何与外部表示例链接的?我认为,如果内部查询有任何结果,它将更新样本中的所有记录。如果我错了,请纠正我。@San这太完美了。我假设您不相信像这样加入更新会正常运行。这个我也吃过一次。。更新基于子查询表的sourcetable签入存在中的每一行进行。@San:谢谢您的评论。子查询和外部查询在A.ID=C.ID条件下链接。这在OP的代码中不清楚,因为表别名不一致。感谢您及时回复。这个脚本对我来说很好用。除此之外,我还有大约8个类似但略有不同的更新脚本,我想将它们全部运行到一个脚本中。我是否应该使用一个包/过程,以便同时执行所有8个类似的脚本?请建议我做什么和如何做。我正在使用上述相同的查询,但这次,它必须更新日期字段。我正在使用这个查询,但它不起作用。关于这里有什么问题的任何想法或建议;'更新样本C将SAMPLE.C_DATE=设置为_DATE'01/01/2013'、'MM/DD/yyyyy'并更新为_DATE'12/31/2013'、'MM/DD/yyyyyy'(如果存在)从成员A、S_NEW B中选择*,其中A.MEM_NBR=B.MEM_NBR=B.MEM_NBR和B.M_ID(在111122223333;中)和A.L_TEST=设置为_DATE'01/01/2013'、'MM/DD/yyyyyy'和B