假设我想将来自不同数据库的2个表合并到一个表中,其中包含来自2个表的所有数据:
结果看起来像这样:
结果表中的条目不是多余的,因为保时捷和大众有2个条目吗?或者我可以在“库存”列中添加值,因为“标记”列是明确的吗?
答案 0 :(得分:1)
我希望这会对你有所帮助
SELECT ROW_NUMBER() OVER (ORDER BY Mark) AS new_ID, Mark, SUM(Stock) AS Stock
FROM
(
SELECT Mark,Stock FROM Database1.dbo.table1
UNION ALL
SELECT Mark,Stock FROM Database2.dbo.table2
) RESULT
GROUP BY Mark
答案 1 :(得分:0)
试试这个:
Select Mark, Stock, row_number() over(order by Mark desc) from table1
union all
Select Mark, Stock, row_number() over(order by Mark desc) from table2
答案 2 :(得分:0)
无论数据冗余如何,您都可以使用union all
子句来实现此目的。像:
Select * From tableA UNION ALL Select * From tanleB
确保每个
之间的列总数和数据类型匹配答案 3 :(得分:0)
不要忘记使用完全限定的表名,因为表位于不同的数据库中
SELECT
Mark
,Stock
FROM Database1.dbo.table1
UNION ALL
SELECT
Mark
,Stock
FROM Database2.dbo.table2
答案 4 :(得分:0)
如果这些是2个实时数据库,并且您需要不断地将2个数据库中的行包含到新数据库中,请考虑将该表作为视图编写在第3个数据库中。
这样,您还可以添加一个列,指定数据行所在的系统。总结这些值是一个选项,但是如果你有一个关于错误求和值的查询,你怎么知道哪个系统是罪魁祸首?
答案 5 :(得分:0)
select * from tableA@"database_link_name"
您可以在此处阅读有关合并声明的内容:https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm#SQLRF01606
merge into result_table res
using (select mark, stock, some_unique_id
from result_table res2
union all
select mark, stock, some_unique_id
from tableA@"database_link_name") diff
on (res.some_unique_id = diff.some_unique_id )
when matched then
update set res.mark = diff.mark,
res.stock = diff.stock
when not matched then
insert
(res.mark,
res.stock,
res.some_unique_id)
values
(diff.mark,
diff.stock,
diff.some_unique_id);