2011-12-09 48 views
0

我有一個約50「或」條件和所有與「喜歡」操作符的SQL。我從VB Access代碼執行這個SQL。微軟訪問很長,並得到「表達太長」的錯誤

但是查詢失敗說「表達太長」的錯誤(主要是我想的,因爲它超過了查詢網格1024個字符。

SELECT * 
    FROM <My Database> 
WHERE (
     [Title] = '' 
     OR [Title] = '' 
     OR [Title] = '' 
     OR [Title] = '' 
     OR [Title] = '' 
     OR [Title] = '' 
     OR [Title] = '' 
     OR [Title] = '' 
     OR [Title] = '' 
     OR [Title] = '' 
     ) 
     AND (
      [TITLE] LIKE '*Afghanistan*' 
      OR [TITLE] LIKE '*Term1*' 
      OR [TITLE] LIKE '*Term2*' 
      OR [TITLE] LIKE '*Term3*' 
      OR ..<around 40 like these> 
      OR [COUNTRY] LIKE '*Country1*' 
      OR ...<around 40 like these> 
      ); 

任何意見或建議如何解決此問題?

+0

你可以發佈查詢的SQL嗎? –

+0

嗨iDevlp,只是添加了代碼示例.. – user1087661

+1

不簽名您的帖子,如果您想使用您的真實姓名,請在用戶個人資料頁面更改您的用戶名。 :) – mac

回答

4

建議:插入參數值轉化基地「分期」表(可能在另一個臨時數據庫),並創建安瑟尼加入到使用EXISTS這些表使用ALIKE(而不是LIKE),它總是使用標準SQL通配符(%。 )。

SELECT * 
    FROM MyTable AS m 
WHERE EXISTS (
       SELECT * 
       FROM MyExactParams AS x 
       WHERE m.Title = x.Title 
      ) 
     AND (
      EXISTS (
        SELECT * 
         FROM MyPatternParams AS p 
        WHERE m.Title ALIKE '%' + p.Title + '%' 
        ) 
      OR EXISTS (
         SELECT * 
         FROM MyPatternCountries AS c 
         WHERE m.Country ALIKE '%' + c.Country + '%' 
        ) 
      ); 
+0

MS-Access SQL使用*和?作爲通配符而不是T-SQL的%和_。 –

+1

@webturner:你錯了。再看看,[「使用'ALIKE'(而不是'LIKE')...」](http://stackoverflow.com/questions/5166907/ms-access-sql-any-reason-why-like-不工作/ 5170214#5170214) – onedaywhen

+0

嗨onedaywhen - 我只是沒有文字來謝謝你..你簡直太棒了..感謝Webturner也。他昨天解決了我的疑惑。非常感謝你們...... – user1087661

0

首先感謝您發佈這個作爲一個單獨的問題your previous one。這是正確的方法來做到這一點:-)

重複OR [Title] = ''的東西應該去,他們只是混亂,你只需要其中之一,假設你真的需要匹配一個空的標題。

其次,你真的需要通配符嗎?如果數據庫設計良好,那麼Country字段應該只包含國家名稱,因此您可以只說[Country]='Afghanistan'

如果您不需要通配符那麼IN關鍵字變成有用:您可以使用[Country] IN ('Afghanistan', 'Term1', 'Term2', 'Term3')

onedaywhen的建議非常好(+1從我)檢查多個選項,但我擔心你的代碼指向一些設計問題。你想用這個代碼做什麼:找到一切?驗證輸入?根據用戶選擇查找?

+0

嗨Webturner,感謝您的意見。它們非常有價值。我只是喜歡你們正在做的無私幫助。要回答你的問題,是的,實際上需要通配符。這個要求相當複雜。我必須搜索與任何國家或任何來自該國家的字符串相關的字符串。例如。在全球尋找「亞洲IPAD」的人或尋找「IPAD」的亞洲人。 – user1087661