2015-05-24 55 views
1

我在使用此SQL時遇到了問題。我不確定這是否可以解決。我一直在尋找各種可能的方式來讓LIKE按我希望的方式工作,但似乎無法找到解決方案。我的問題是字段[程序]在表CFRRR(這是a和b獲取它們的值的地方)中寫入的表格完全相同,因爲它是在表出席時寫入的。例如:在表格中,CFRRR程序可以是CW/CF或MC/CF,也可以是CW等等。但在考勤表中,程序可以寫成CW/MC/CF。因爲這個代碼沒有選擇一條記錄。用於SQL MS Access的LIKE解決方案

是否有可能代碼可以讀取兩者都有CW或兩者都有CF值?

a = Program 
b = language 


Set db = CurrentDb 

strSQL = "SELECT TOP 1 userID 
      FROM attendance 
      where attendance.Programs LIKE '%" & a & "' 
      AND attendance.Language LIKE '*" & b & "*' 
      AND attendance.Status = 'Available' 
      AND attendance.Tracking = 0" 
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 
+0

爲什麼使用LIKE?只需創建一個包含所有可能值的工作表(對我來說,看起來像2^3 + 2^2 + 2 = 13)並對其進行簡單的INNER JOIN即可。請記住即使在全身SQL方言中,LIKE也不是正則表達式解析器。 –

回答

0

您需要一個「包含」功能,因爲與LIKE你不能做你想做的。您必須首先劃分搜索條件,然後使用「/」符號分割它們。例如需要使用搜索詞「CW」和「CF」(以及languajes中的詞)來分割鍵「CW/CF」(請參閱​​vba split函數)。然後通過SQl找到每個搜索詞LIKE "*searchTerm*"。您可能需要動態構建一個SQL字符串(使用for...next並循環使用split函數生成的數組)。該功能的 結果會是這樣(在這種情況下,「一個」有兩個方面和「b」也有兩個方面,所以數組從0到1):

"SELECT TOP 1 userID 
     FROM attendance 
     where Programs LIKE '*" & termP(0) & "*' AND " & _ 
      "Programs LIKE '*" & termP(1) & "*' AND " & _ 
      "languaje LIKE '*" & termL(0) & "*' AND " & _ 
      "languaje LIKE '*" & termL(1) & "*' " & _ 
     AND attendance.Status = 'Available' 
     AND attendance.Tracking = 0" 

你可以把真實值的SQl字符串而不是陣列位置。

或者您可以爲您的餐桌考慮更好的結構。