2014-01-31 43 views
0

我有两个数据库表来自2个不同的数据库,一个在MYSQL和一个在MSSQL。两者都有类似的数据,有些基于另一个数据(只有一些共同的列)。它们位于两个不同的数据库中,因为一个是用于Crystal Reports(MSSQL)的远程系统,另一个用于运行我们的工作流管理系统(MYSQL)。比较两种不同类型的数据库表并比较它们的数据?

MSSQL数据库表 - Job_Operation

Job_OperationKey | Job_Operation | Vendor | Work_Center | Job | Etc... 

MySQL数据库表 - View_Job_Info

Id | job_num | posted_date | columns etc.. | latest_workorder_date | 

是可以做的,我可以看到的是工作和job_num之间最好的对比。这样,如果Job ####与job_num ####匹配,则将两个表中的列列成1个表。我不确定这是多么有道理,因为我在使用Adminer时遇到了从Job_Operation查询所有内容的内存问题。

的事情是,我不需要每一个工作,我只需要匹配,以这种特殊的查询工作:

Select * 
    FROM view_job_info 
    WHERE (DATEDIFF(NOW(), latest_workorder_date) < 90 OR (DATEDIFF(NOW(), posted_date) < 30)) 
     AND job_num > 2000` 

这样我可以得到当前活动的作业。

这怎么可能成为可能?

+0

为什么不用Crystal Reports连接到MYSQL数据库,并在那里将两个表连接在一起? –

+0

@mikeoscarecho你是什么意思,“从两个表格列表到一张表”是你唯一的要求? – Punter015

+0

@OliverLockett我在一台Linux机器上,但我甚至不知道这是可能的。如果我这样做,我仍然需要以某种方式合并数据,请检查Job和job_num列,如果两者匹配,则将它们存储在表中?我可以使用PHP查询Crystal以将数据输出到页面吗? – MikeOscarEcho

回答

2
  1. 创建从MSSQL到MySQL的链接服务器。
  2. 在MSSQL中访问MySQL表 - 例如。 select * from openquery(test,'select * from MySQL_Table),测试是链接的服务器名称,MySQL_Table是MySQL中的表格
  3. 将上述查询的输出放入临时表中。
  4. 内部将临时表与job_num和job上的MSSQL表连接起来。
  5. 上述结果的输出可以任何你想要的方式使用。

更多联系您的数据库administor执行上述活动。 参考http://www.packtpub.com/article/mysql-linked-server-on-sql-server-2008在MSSQL中创建链接服务器。

+0

感谢您一步一步的努力,我会继续努力并报告,如果我需要更多的解释。 – MikeOscarEcho

+0

@mikeoscarecho如果您有这种感觉,请将其标记为答案。 – Punter015