SQL Server将多个表合并到一个表中
我想将3个表合并到一个表中,以获得具有以下条件的完整数据SQL Server将多个表合并到一个表中,sql,sql-server,tsql,sql-server-2008,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2008,Sql Server 2012,我想将3个表合并到一个表中,以获得具有以下条件的完整数据 将3个表[test1]、[test2]、[test3]合并到一个表[test] 如果合并时,如果列为空,请从另一个表中选择 Col1存在于所有3个表中 下面是我从表2中合并到测试中的示例代码 MERGE INTO [dbo].[test] a USING [dbo].[test2] b ON a.col1 = b.col1 WHEN MATCHED THEN UPDATE SET col1 = b.col1,
- 将3个表[test1]、[test2]、[test3]合并到一个表[test]
- 如果合并时,如果列为空,请从另一个表中选择
- Col1存在于所有3个表中
MERGE INTO [dbo].[test] a
USING [dbo].[test2] b ON a.col1 = b.col1
WHEN MATCHED THEN
UPDATE
SET col1 = b.col1,
col2 = b.col2,
col3 = b.col3,
col4 = b.col4
WHERE col1 = '' OR col2 = '' OR col3 = '' OR col4 = '';
它会出现错误:
关键字“where”附近的语法不正确
你能展示一下桌子的结构吗 你可以用
UNION ALL
操作员遵循此链接
或者将
内部联接
与更新
语句混合使用WHERE
子句上的条件请尝试合并函数,而不是使用WHERE条件。如果遇到空值,则COALESCE函数将采用下一个值
Merge into [dbo].[test] a
using [dbo].[test2] b
on a.col1 = b.col1
when matched then
update
set col2 = COALESCE(a.col2, b.col2),
col3 = COALESCE(a.col3, b.col3),
col4 = COALESCE(a.col4, b.col4);
因此,在修改后的代码中,如果表[dbo].[test]col2为Null,那么它将从[dbo].[test2]获取值。因为您将使用COALESCE,所以您将能够合并任意数量的值。您可能希望添加到匹配的部分(例如,匹配时
,a.col1=''或a.col2=''。
)假设您正在更新测试中的col1为空,为什么要更新主表?不是从3个表中插入非空值?@SanalSunny,我认为是一样的。@ZLK,我认为错误语法是在where子句之前。错误是因为不能像那样将where子句放在那里。我告诉过你一个有效的解决方法。删除where子句,并在匹配时将和…
添加到部分。当值为NULL时,但当值为“”或“”时,它会工作。我们如何使用?在这种情况下,使用语句时。请将COALESCE(a.col2,b.col2)替换为CASE,当a.col2=''那么b.col2 end您应该检查表结构。