2014-01-31 44 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