Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Select子查询生成结果,但如果在update子句中使用,则不会生成结果_Mysql_Sql - Fatal编程技术网

Mysql Select子查询生成结果,但如果在update子句中使用,则不会生成结果

Mysql Select子查询生成结果,但如果在update子句中使用,则不会生成结果,mysql,sql,Mysql,Sql,此代码生成此结果 SELECT PER.GLACCOUNT, PER.PERIOD,(SELECT GL.[CLOSING_CREDIT] FROM [EMBDATA].[DBO].[_EMB_GL_ACTUALVALUESTYP] AS GL WHERE GL.PERIOD = (DBO.GETMAXPERIOD(PER.GLACCOUNT,PER.PERIOD)) AND GL.ID COLLATE SQL_Latin1_General_CP1_CS_AS

此代码生成此结果

 SELECT PER.GLACCOUNT, PER.PERIOD,(SELECT GL.[CLOSING_CREDIT] 
    FROM [EMBDATA].[DBO].[_EMB_GL_ACTUALVALUESTYP] AS GL
    WHERE GL.PERIOD = (DBO.GETMAXPERIOD(PER.GLACCOUNT,PER.PERIOD)) 
    AND GL.ID COLLATE SQL_Latin1_General_CP1_CS_AS   =            
   COLLATE SQL_Latin1_General_CP1_CS_AS ) AS BALANCE
   FROM [DBO].[GL_PERIOD_BAL] AS PER
   WHERE LEFT(PER.GLACCOUNT,4) = 'NM01' AND [BAL.TYPE] = 'R'
   ORDER BY PER.GLACCOUNT,PER.PERIOD    GLACCOUNT   PERIOD  BALANCE)
结果

NM01-4100-0015  2015-12 7081557.0000
NM01-4100-0016  2015-12 0.0000
NM01-4100-0017  2015-12 0.0000
NM01-4100-0018  2015-12 12329577.0000
NM01-4100-0019  2015-12 1622830124.0000
NM01-4100-0020  2015-12 0.0000
NM01-4100-0021  2015-12 23747.0000
NM01-4100-0022  2015-12 0.0000
NM01-4100-0023  2015-12 1623014.0000
但是,如果我想将它合并到一个update语句中,它不是在更新 密码

UPDATE [DBO].[GL_PERIOD_BAL]  
SET [CLOSING_CREDIT] = (SELECT GL.[CLOSING_CREDIT] 
FROM [EMBRACEDATA].[DBO].[_EMB_GL_ACTUALVALUESTYP] GL
WHERE GL.PERIOD = (DBO.GETMAXPERIOD(GLACCOUNT,PERIOD))
AND GL.ID COLLATE SQL_Latin1_General_CP1_CS_AS  =
GLACCOUNT  COLLATE SQL_Latin1_General_CP1_CS_AS)
WHERE LEFT(GLACCOUNT,4) = 'NM01' AND [BAL.TYPE] = 'R'

在oracle中尝试使用子查询更新时,如果子查询返回多行,则会显示以下错误消息: “单行子查询返回多行”

我想你也是这样。如果更新成功,子查询不应返回多行。
您需要使用有助于将获取的行数限制为一行的各种子句之一,这可能是top子句、limit子句等。这应该根据您希望为更新选择的数据来决定/操作。

非常感谢您的输入

我通过在所有列中添加别名来找到解决方案

UPDATE [dbo].[GL_PERIOD_BAL]  

       SET[dbo].[GL_PERIOD_BAL] . [CLOSING_CREDIT] = (SELECT GL.   [CLOSING_CREDIT] 
                      FROM [EmbraceData].[dbo].[_EMB_GL_ACTUALVALUESTYP]   AS GL
      WHERE GL.PERIOD = (DBO.gETMAXPERIOD([dbo].  [GL_PERIOD_BAL].GLACCOUNT,[dbo].  [GL_PERIOD_BAL].PERIOD)) 
                          AND GL.ID COLLATE SQL_Latin1_General_CP1_CS_AS
                         = [dbo].[GL_PERIOD_BAL].GLACCOUNT      
        COLLATE SQL_Latin1_General_CP1_CS_AS)
                         WHERE LEFT([dbo].[GL_PERIOD_BAL].GLACCOUNT,4) = 'NM01'   AND    [dbo].[GL_PERIOD_BAL].[BAL.TYPE] = 'R'