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

时间:2015-06-29 13:37:28

标签: 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   =            
   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 [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'

2 个答案:

答案 0 :(得分:0)

当您尝试使用oracle中的子查询进行更新时,如果子查询返回多行,则会显示以下错误消息:  "单行子查询返回多行"

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

答案 1 :(得分:0)

非常感谢您的投入。

我设法通过为所有列添加别名来找到解决方案。

rsync -avh -e  "ssh -p 3286" somelocal_folder/ me@x.x.x.x:/data/bu/