SQL合并行和属性

时间:2014-12-09 16:11:01

标签: sql sql-server merge

我是SQL的新手,我正在尝试根据唯一键找到合并2个表(从2个不同来源的文件导入)的简单语句。合并需要包含行和属性,有效地合并两个模式。

我正在寻找的确切行为是:

  1. 合并两个表中具有相同键的行
  2. 包含不在两个表中的键的行,未更改
  3. 合并两个表中具有相同属性名称的属性
  4. 如果相同的密钥在两个表中都定义了属性,那么表2将覆盖表1。
  5. 我理解前2个可以在标准的FULL OUTER JOIN中实现,但最终会出现重复的列

    我也明白前3个可以通过FULL OUTER JOIN加上管道/连接来实现,但只有在一个或另一个表中填充属性时才能实现,而不是两个

    我知道T-SQL有一个合并函数,但到目前为止我只看到它在两者中有相同的属性时合并行。但是,我还没有选择将要使用的SQL的味道。

    我正在寻找3种解决方案中的一种(按优先顺序排列) 1.将这4种行为组合成单个标准SQL行的方法 2.将这4种行为组合成尽可能少的标准SQL查询的方法 3.一种结合这四种行为的方法,这些行为依赖于SQL变体的特定功能,这在SQL的所有变体中都不可用

1 个答案:

答案 0 :(得分:0)

您可以使用COALESCE'合并'两列。

SELECT 
    -- id's are either the same or non existent in either table
    id   = COALESCE(table2.id, table1.id),
    -- where the join condition is satisfied use table2's values
    -- where the join condition is not satisfied use either table1's or table2's values
    colN = COALESCE(table2.colN, table1.colN),
    -- add columns that aren't in either table
    colX = table2.colX,
    colY = table1.colY
FROM table1
FULL OUTER JOIN table2
ON table1.id = table2.id