2012-06-28 108 views
0

我需要通过将文本数据与辅助表中的Notes字段连接来更新我的表tblMain中的Notes字段tblSecond通过匹配两个表中的ID字段。使用另一个表中的数据根据​​键值使用另一个表中的数据更新字段

我用下面的SQL:

UPDATE tblMain 
SET tblMain.Notes = (tblMain.Notes + (SELECT DISTINCT Notes FROM tblSecond 
WHERE tblSecond.ID = tblMain.ID)) 

,但我得到以下错误

Subquery returned more than 1 value.

大概是因为SELECT语句返回的整个结果。

我该如何成功执行此操作?

+0

我只是试图再次使用MERGE '合并成tblMain \t USING \t( \t SELECT ID,注意到 \t FROM tblSecond \t)第二ON(Second.ID = tblMain.ID) \t WHEN MATCHED然后更新 \t SET tblMain.Notes = tblMain.Notes + Second.notes' 但我得到一个类似的错误: MERGE语句试图不止一次地更新或删除同一行。当目标行匹配多个源行时会发生这种情况。 MERGE语句不能多次更新/删除目标表的同一行。细化ON子句以确保目标行最多匹配一个源行,或者使用GROUP BY子句。' – mechaman64

+0

我假设在tblSecond表中,您可以为tblMain中的单个记录创建多个笔记?换句话说,可能将tblSecond中的多个记录连接成单个tblMain记录? – LittleBobbyTables

+0

如果第二行中有两行对应于Main中的一行,您是否想要将两行连接到Main? –

回答

1

如果子查询返回多个值它将处理。

UPDATE tblmain 
SET tblmain.notes = (tblmain.notes 
         + (SELECT DISTINCT notes + ' ' 
          FROM tblsecond 
          WHERE tblsecond.id = tblmain.id 
          FOR xml path (''))) 
+0

这很好用 - 谢谢! – mechaman64

1

如果子查询返回多个值,则表示tblSecond包含多于1个相应ID的条目。所以我会建议先检查你的数据。

更新本身也可以使用from条款写的,像这样(未经)

update tblMain 
    set Notes = a.Notes + b.Notes 
from 
    tblMain a 
    inner join tblSecond b on a.Id = b.Id 
+2

tblMain将只有连接到笔记的最后一个值。 –

+0

@Romil谢谢指出。 – mfussenegger

+0

要么改正帖子或删除,因为它会造成其他读者的困惑。它也会帮助你避免downvoting。 –

相关问题