2011-12-10 135 views
10

我遷移的企業Oracle數據庫到MySQL(是的,不要問我爲什麼)和(報告)幾個疑問是巨大的,在MySQL工作Oracle查詢到MySQL的左連接

其中之一是4021線, 89 INNER JOIN

這其中產生一個完全的細節,爲公司客戶報告財務的最後一年。

我需要的報告(因爲我們得到的一年即將結束)2011年的工作,我看到許多網站,最大左連接MySQL的是60點剩餘加盟。

我擰這個報告?或者我有辦法運行它?

+0

如果您需要新的連接,因爲您的報告涵蓋新的一年,那麼您的數據模型可能不正確。 –

+1

爲什麼不使用大寫字母? –

回答

0

你將不得不跳向上(或向下,取決於你的觀點)的編程語言來解決這個問題(紅寶石,PHP,Python和等)都會使處理許多連接只要使用原生對象,而不是更容易完全依靠巨大的參與。

而且你是正確的,在MySQL連接的最大數目爲61(http://dev.mysql.com/doc/refman/5.0/en/joins-limits.html

+1

您提供的鏈接指出,任何一個'JOIN'語句中可以引用的表的最大數量是61,而不是任何一個查詢中'JOIN'的最大數量是61. –

0

如果是這樣的話,你可能想嘗試和突破查詢了一些,並得到了一些「左連接」預先查詢的內容以及其他可能的元素。例如,你可以預先查詢之類的東西(而只是猜測)與G/L科目代碼(ID列)等爲一體的預查詢類別

庫存物品。

加入,與所有的訂單細節訂購標題摘要才能獲得客戶的ID,並加入到客戶用作另一預先查詢。確保加入總體報告要求的任何關鍵要素。

繼續在列表中向下如果可能的話,你也許可以殺死一羣,因爲他們將是子查詢,沒有人水平將有61聯接事情的結果。

0

使用枚舉類型,這將節省你痛苦的左聯接

如果你有幾張桌子,你可以只用 enum這是一個很大的進步刪除

。特別是與什麼樣的數據,你有

5

我覺得你的報表查詢無論如何都會導致EXPLAIN using temporary。您可以在事務中將單個查詢分解爲幾個,並明確地創建臨時表。

如果你的Oracle查詢包含類似於命名子查詢(我的意思是WITH子查詢來自T-SQL,我不知道它們是否存在於Oracle中,但絕對不存在於MySQL中),這可能會更有幫助。

+0

對於臨時表。去過也做過。 – Mchl

+0

CTE存在於普通數據庫中,但是mysql :)))。分配給臨時表的空間也是有限的,即使在mysql中你也應該考慮這個:) –