2015-05-24 2 views
1

У меня возникли проблемы с моим LIKE в этом SQL. Я не уверен, что это даже возможно. Я искал все возможные способы заставить LIKE работать так, как хотелось бы, чтобы он работал, но не может найти решение. Мои проблемы заключаются в том, что поле [program] не написано точно так же в таблице CFRRR (где a и b получают свои значения), поскольку это написано в таблице посещаемости. Например: в таблице программа CFRRR может быть CW/CF или MC/CF или только CW и т. Д. Но в таблице посещаемости Программы могут быть написаны CW/MC/CF. Из-за этого код не выбирает запись.LIKE решение для SQL MS Access

Возможно ли, что код может считать, что оба имеют 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. Помните, что LIKE - это * не * регулярный синтаксический анализатор даже в диалоговом диалекте SQL всех тел. –

ответ

0

Вы должны «содержать» функцию, потому что с LIKE вы не можете делать то, что вы хотите. Сначала вы должны разделить поисковые термины, и вы можете использовать символ «/», чтобы разделить их. например, ключ «CW/CF» необходимо разбить (см. функцию vba split) в поисковых терминах «CW» и «CF» (и то же самое для languajes). И затем найдите через SQl каждый поисковый запрос с LIKE "*searchTerm*". Возможно, вам понадобится построить «на лету» строку SQL (используя for...next и зацикливая массив, сгенерированный с помощью функции split). результата функции будет это (в данном случае «а» имеет два термина и «Б» также два термина, поэтому массивы идут от 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 строка вместо позиций массива.

Или вы можете подумать о лучшей структуре ваших таблиц.

Смежные вопросы