【问题标题】:How to combine data from different columns from different databases from different vendors into one table?如何将来自不同供应商的不同数据库的不同列的数据合并到一张表中?
【发布时间】:2011-03-07 22:10:58
【问题描述】:

假设我在 mysql 中有一个名为 tbl1 的表:-

bookid int
name varchar(20)
price int
categoryid int

然后我在 Oracle 中有第二张表 tbl2 :-

pubid int
name varchar(20)
addr varchar(50)

我想将这两者结合到名为 tbl3 的 MS Sql Server 2008 中,其结构应该是:-

bookid int
name varchar(20)
price int
pubid int
name varchar(20)

请注意,我知道这些表格没有意义,但我只需要这个概念是否可能。如果是,那怎么办?我应该写哪些查询?我不想使用 Sql Server 集成服务。

提前致谢:)

【问题讨论】:

  • 为什么不想使用 SSIS?我问只是因为这正是它的设计目的。
  • 因为我想知道在没有 SSIS 的情况下会写的查询。

标签: mysql sql-server database oracle integration


【解决方案1】:

他们是否有一个可以运行联接的通用列。例如,第一个表中的 categoryid 是否与第二个表中的 pubid 匹配。 table1 中的名称是否与 table2 中的名称匹配。如果是 name 键,则没有其他书具有相同的名称。如果是这样,使用名称作为公用键在表上运行连接。

如果没有公用密钥,则可以使用select * from table1, table2, ..., tablen。这将适用于一个非常大的表。如果您连接两个各有 12 行的表,那么您的结果表将总共有 12*12 = 144 行。

【讨论】:

  • 嗨,Kyra,没有公共列。这种情况该怎么办?
【解决方案2】:

您将需要可以与每个数据库进行通信的东西。如果目标是 SQL Server,并且您不想使用 DTS/SSIS,那么您可以使用链接服务器。唯一的问题是来自 Oracle 的数据如何与来自 MySQL 的数据相关,因为没有匹配的列。无论如何,假设您有一个名为“ORACLESERVER”的链接服务器和另一个名为“MYSQLSEVER”的链接服务器,您可以执行类似的操作(假设 name 是链接列):

Insert SqlServerDbName.SchemaName.TableName(....)
Select ...
From ORACLESERVER.DbName.SchemaName.tbl1 As T1
    Join MYSQLSERVER.DbName.SchemaName.tbl2 As T2
        On T2.name = T1.name

另一种解决方案是使用OPENROWSET 来获得类似的结果。

【讨论】:

  • 您好 Thomas,感谢您的回复。但是如果没有加入条件呢?我只是希望记录并排显示。例如。 table3 的第 1 行应包含 table1 和 table2 的第 1 行。同样,table3 的第 2 行应该包含 table1 和 table2 的第 2 行。
  • @Nitesh Panchal - 如果没有公用列,您将如何确定对于给定的 Oracle 数据,MySQL 中的哪些行应该与它一起使用?如果你想让他们并排,你必须有一些东西可以加入他们。
猜你喜欢
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多