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'