Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
SQL Server将多个表合并到一个表中_Sql_Sql Server_Tsql_Sql Server 2008_Sql Server 2012 - Fatal编程技术网

SQL Server将多个表合并到一个表中

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个表合并到一个表中,以获得具有以下条件的完整数据

  • 将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,
        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您应该检查表结构。