我有两个具有相同表格的数据库模式(列: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
我该怎么做?
请注意,这是我的架构的简化版本,因为我有 有些人也加入了这个问题。
答案 0 :(得分:4)
在重新阅读您的问题之后,听起来您希望在JOIN
字段上name
,而不是维持任何类型的ID
。假设是这种情况,您可以使用ROW_NUMBER()
生成id
和FULL 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 when
与COALESCE表达式进行交换。