2016-11-12 109 views
-3

我正在尋找一種方法來使用php或java來比較兩個sql查詢的輸出。通常我會使用dblink並編寫一個sql查詢來處理完整的外連接並檢查不完全相同的數據。php或java比較數據

但是,因爲這兩個數據庫沒有設置dblinks,所以我不在這種情況下,我使用php編寫,我正在學習java,所以理論上我也可以使用它。

我寫的應用程序的前端是在php中,一個web界面處理用戶登錄和數據庫連接,它也可以收集數據。然後,另一個php應用程序將需要檢查相同記錄的數據,否則它將不得不將它傳遞給java應用程序來執行此操作。

任何有關如何做到這一點的幫助將不勝感激。

長短是這樣的:

我具有其中唯一鍵是已知的,但通常大於1第2層的多維數據結構。我需要找出任何遺漏或不同的記錄。有什麼辦法可以用php或java來完成?

乾杯!

========================== update =================== =========

看了幾個小時之後,這裏是我現在的位置。

首先我建立一個基於對databaseA的查詢的數據結構。然後,我從databaseB相同的查詢構建一個相同的數據結構。

在我擁有這兩個集合之後,我將基於該結構的全局臨時表動態地創建到我的一個測試環境中。然後我將收集的數據插入到各自的臨時表中。 最後一步是比較這兩個臨時表中的數據並在某處輸出該比較 - 這應該不難。

我現在卡在哪裏就是INSERT到臨時表中。 對於數千條記錄來說,這是痛苦的緩慢。我讀了這個: http://www.oracle.com/technetwork/articles/seliverstov-multirows-098120.html

現在我正在努力通過嘗試動態創建一個包將處理批量插入...我在正確的軌道上?

回答

0

我根本不知道php,我只對java有一個模糊的想法。有了這樣的說法:

如果你能夠在一個數據庫中完成所有工作,完整的外連接將成爲最低效的方法。相反,最有效的方法是按所有列進行UNION ALL組,並僅返回組數爲1的組。即:如果組的計數爲2,則同一行存在於兩個表。 (你提到了一個獨一無二的關鍵字 - 唯一的重複關鍵字就是這種類型,它們將不會來自同一張表)。

對於更精細的細節,當您使用UNION ALL時,您可以添加更多列以確定源表 - 但分組是在「基本」列(不包括此標誌)。

現在我不知道如何將兩個數據庫中的結果「引入」到php或java中,但假設它是某種文本文件,在查詢輸出中每行一行。每種語言都必須具有文本處理功能,您可以在其中識別相同的行,並進行計數 - 模仿上面描述的內容。我知道如何在Oracle SQL中執行該操作,還使用UNIX工具;我不知道如何在php或java中做到這一點,但如果你熟悉這些語言,也許你會這樣做。

祝你好運!

+0

感謝您的回答。我更新了我的問題,因爲在這一點上,我認爲我已經確定了一個概念上的解決方案。往上看。另外 - 感謝關於工會小組的提示,我沒有想到這一點,下次我必須寫測試時,我會給它一個鏡頭。 – Jeff