[Access] 詭異的 Join 會導致記憶體損毀?

不知道各位有沒有碰上在 Access 中,SQL 語法 Join 的條件順序對調就會掛?有的話一起分享一下吧~

我是在 ADO.NET 中透過 ODBC 連 Access ,例如下面一條語法在 Access 2007 的電腦跑,可以正常跑,同一個檔案拷貝到 Access 2003 的電腦,就會發生記憶體損毀,在 Access 2003 的查詢下同樣的語法,也會發生資料庫損毀掛掉,但是順序變一下就可以跑:

Access 2003 不能跑

SELECT *
FROM ServiceList Left Join ServiceActive On ((ServiceList.SN>0) AND (ServiceActive.Organization=’風禹科技驗證有限公司’) AND (ServiceList.SN=ServiceActive.ServiceSN))
Order By ServiceList.SN ;

把紅色、藍色順序對調,在 Access 2003 的電腦就可以透過 ADO.NET 查詢,Access 2003 的查詢也可以跑:

Access 2003 能跑

SELECT *
FROM ServiceList Left Join ServiceActive On ((ServiceList.SN>0) AND (ServiceList.SN=ServiceActive.ServiceSN) AND (ServiceActive.Organization=’風禹科技驗證有限公司’))
Order By ServiceList.SN ;

在 Access 2003 中,常常有這類詭異的狀況,不知道各位有沒有碰過。

註:兩台測試環境都是 Win2003 SP2 繁中的環境,兩種順序在 Access 2007 都能跑,原先的順序效能比較高,所以原先語法用第一條。

廣告
Categories: Office | 2 則迴響

文章分頁導航

2 thoughts on “[Access] 詭異的 Join 會導致記憶體損毀?

  1. 俊霖

    我想你可能希望先篩選這2個條件:ServiceList.SN>0 和 ServiceActive.Organization=’風禹科技驗證有限公司’
    在進行join,確實可以增加join的效率,那這樣子寫呢:
     
    SELECT * FROM ServiceList Left Join ServiceActive 
    Where ((ServiceList.SN>0) AND (ServiceActive.Organization=’風禹科技驗證有限公司’))
    On (ServiceList.SN=ServiceActive.ServiceSN)Order By ServiceList.SN ;
     
    PS:由於回應無法編輯自的顏色,所以有的地方怪怪的請見諒。
     

    按讚數

  2. 子璉


    Join 語法中有規範 Where 不能放在 On 前面。
    其實你自己隨便建個表測測看就知道了。

    按讚數

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: