合并来自不同数据库的2个表

时间:2016-11-02 16:34:07

标签: sql sql-server tsql

假设我想将来自不同数据库的2个表合并到一个表中,其中包含来自2个表的所有数据:

enter image description here

结果看起来像这样:

enter image description here

结果表中的条目不是多余的,因为保时捷和大众有2个条目吗?或者我可以在“库存”列中添加值,因为“标记”列是明确的吗?

6 个答案:

答案 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)

  1. 您需要创建到另一个数据库的数据库链接这里是如何创建数据库链接http://psoug.org/definition/create_database_link.htm的示例 从另一个数据库创建select语句后,应该看:select * from tableA@"database_link_name"
  2. 然后你需要使用MERGE语句从另一个数据库中推送数据,这样merge语句看起来应该是这样的。
  3. 您可以在此处阅读有关合并声明的内容: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);