Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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合并行和属性_Sql_Sql Server_Merge - Fatal编程技术网

SQL合并行和属性

SQL合并行和属性,sql,sql-server,merge,Sql,Sql Server,Merge,我是SQL新手,正在尝试找到一个简单的语句,用于根据唯一键合并从两个不同源文件导入的两个表。合并需要同时使用行和属性,同时有效地合并两个模式 我要寻找的确切行为是: 合并两个表中键相同的行 包含键不在两个表中的行,保持不变 合并两个表中具有相同属性名称的属性 如果同一个键在两个表中都定义了一个属性,那么表2将覆盖表1。 我知道前2个可以在标准的完全外部联接中实现,但最终会出现重复的列 我还了解到,前3个可以通过完整的外部连接加上管道/连接来实现,但前提是在一个或另一个表中填充属性,而不是在两个表

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

我要寻找的确切行为是:

合并两个表中键相同的行 包含键不在两个表中的行,保持不变 合并两个表中具有相同属性名称的属性 如果同一个键在两个表中都定义了一个属性,那么表2将覆盖表1。 我知道前2个可以在标准的完全外部联接中实现,但最终会出现重复的列

我还了解到,前3个可以通过完整的外部连接加上管道/连接来实现,但前提是在一个或另一个表中填充属性,而不是在两个表中都填充属性

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

我正在寻找三种解决方案中的一种,按优先顺序排列 1.将这4种行为组合成一个标准SQL行的方法 2.将这4种行为组合成尽可能少的标准SQL查询的方法 3.结合这4种行为的方法依赖于SQL变体的特定功能,而SQL变体并非在所有SQL变体中都可用。您可以使用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

您的问题相当模糊,但似乎您可以轻松地使用聚合或案例表达式来完成您要做的事情。