在两个数据库模式中对表进行完全查询

时间:2014-05-27 13:24:12

标签: sql sql-server database tsql

我有两个具有相同表格的数据库模式(列:ID,名字,姓氏,值)。

数据库1值:

1, John, Goodman, 5
2, Peter, Snow, 6
3, Mike, Walker, 7
4, John, Goodman, 8

数据库2值:

1, Peter, Snow, 2
2, Bobby, White, 1
3, Mike, Walker, 1
4, Brad, West, 2

我想写和查询会给我这个结果, 即,两个表(左和右)的摘要:

Number, First Name, Last Name, Table.DB1, Table.DB2
---------------------------------------------------
1, John, Goodman, 13, 0
2, Peter, Snow, 6, 2
3, Mike, Walker, 7, 1
4, Bobby, White, 0, 1
5, Brad, West, 0, 2

我该怎么做?

请注意,这是我的架构的简化版本,因为我有 有些人也加入了这个问题。

2 个答案:

答案 0 :(得分:4)

在重新阅读您的问题之后,听起来您希望在JOIN字段上name,而不是维持任何类型的ID。假设是这种情况,您可以使用ROW_NUMBER()生成idFULL OUTER JOIN来获取两个表的结果:

SELECT Row_Number() Over (order by (select null)) ID, 
    COALESCE(t1.Name,t2.Name) Name, 
    COALESCE(t1.Value,0) T1Value, 
    COALESCE(t2.Value,0) T2Value
FROM databasename.schemaname.table1 t1
    FULL OUTER JOIN databasename.schemaname.table2 t2 ON t1.Name = t2.Name

请注意,新ID没有具体的订购。

答案 1 :(得分:0)

如果我假设你是通过名称而不是通过ID进行比较。

只需使用外部联接

SELECT db1.Name, 

case when db1.Value is null then 0 else db1.Value, 

case when db2.Value is null then 0 else db2.Value

FROM db1

FULL OUTER JOIN db2 on db1.Name = db2.Name

您也可以将case whenCOALESCE表达式进行交换。