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

时间:2018-11-14 03:25:48

标签: 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,
        col2 = b.col2,
        col3 = b.col3,
        col4 = b.col4
    WHERE col1 = '' OR col2 = '' OR col3 = '' OR col4 = '';

出现错误:

  

关键字“ where”附近的语法不正确。

2 个答案:

答案 0 :(得分:1)

请尝试使用COALESCE函数,而不要使用where条件。如果遇到NULL,则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,因此可以合并任意数量的值。

答案 1 :(得分:0)

您可以显示表格结构吗?

您可以使用 UNION ALL操作员点击此链接。

https://www.techonthenet.com/sql_server/union.php

INNER JOIN子句中的条件与UPDATEWHERE语句的混合运算