Разбор на лету при выполнении запроса в MS Access - PullRequest
0 голосов
/ 19 ноября 2010

В Microsoft Access у меня есть запрос uniSelectedContacts и таблица возможных.

Допустим, в возможных у меня есть это:

Smith,John
Dough,John B
Ward,Jane Karon
Eggert,Samantha R 

В uniSelectedContacts У меня есть это:

Smith,John A 1552 1st Ave
Dough,John 1111 2st Ave
Ward,Jane K 2222 3st Ave
Eggert,Samantha Rachel 3333 1st Ave

Я хочу найти, где можно узнать имя и фамилию. Однако из-за изменения среднего начального значения, если среднего возможного начального значения нет, я хочу учесть все экземпляры имени и фамилии из uniSelectedContacts с использованием INNER JOIN. Если у возможных вариантов есть средняя инициализация (имя), независимо от ее средней инициалы или имени, я хочу учесть записи, где имя и фамилия uniSelectedContacts и возможные идентичны друг другу, а также где первая буква среднего инициал (имя) uniSelectedContacts соответствует первой букве средней буквы (имя) возможных. Таким образом, в приведенном выше примере это должно быть возвращено:

Smith,John 1552 1st Ave
Dough,John B 1111 2st Ave
Ward,Jane Karon 2222 3st Ave
Eggert,Samantha R 3333 1st Ave

Запрос ниже быстрый, и я хочу сохранить скорость, но все пропущенные записи будут пропущены (из-за различий в средней букве (имя):

SELECT possibles.fullname,
       uniSelectedContacts.addresses,
       uniSelectedContacts.cities,
       uniSelectedContacts.us_states_and_canada,
       uniSelectedContacts.zip_codes INTO PrepareForDuplicateCheck
  FROM uniSelectedContacts INNER JOIN possibles ON uniSelectedContacts.TheName = possibles.fullname;

Чтобы попытаться решить проблему выше, у меня есть это:

SELECT possibles.fullname,
       uniSelectedContacts.addresses,
       uniSelectedContacts.cities,
       uniSelectedContacts.us_states_and_canada,
       uniSelectedContacts.zip_codes,
       possibles.[firstname] AS Expr1,
       possibles.[lastname] AS Expr2 INTO PrepareForDuplicateCheck
  FROM uniSelectedContacts INNER JOIN possibles ON uniSelectedContacts.TheName = possibles.fullname
  WHERE (((possibles.firstname)=Left([fullname],InStr([fullname],",")-1))
    AND ((possibles.lastname)=Mid([fullname],InStrRev([fullname],",")+1)));

Вышеприведенное сообщение дает сообщение «Введите значение параметра возможные. Имя_сервера». Но я также не уверен, что основная логика запроса даст ожидаемые результаты.

Спасибо за ответ.

1 Ответ

0 голосов
/ 19 ноября 2010

Немного сложно отличить поля (столбцы) от опубликованных образцов, но я предполагаю, что обе таблицы имеют полное имя в формате surnameforename.

Я не предполагаю, что это будетбыстро, но попробуйте.

SELECT p.aname, 
       u.addresses
       u.addresses, 
       u.cities,
       u.us_states_and_canada,
       u.zip_codes
INTO PrepareForDuplicateCheck
FROM (
      SELECT 
         Left([thename],IIf(InStrRev([thename]," ")>0,
           InStrRev([thename]," ")-1,Len([thename]))) As AName, 
         addresses, 
         cities,
         us_states_and_canada,
         zip_codes
      FROM uniSelectedContacts) u
INNER JOIN (
      SELECT 
         Left([fullname],IIf(InStrRev([fullname]," ")>0,
           InStrRev([fullname]," ")-1,Len([fullname]))) As AName 
      FROM possibles)  AS p 
ON u.AName = p.AName;

Другая возможность:

SELECT p.aname, 
       u.addresses
INTO PrepareForDuplicateCheck
FROM  (
      SELECT 
         Left([fullname],IIf(InStrRev([fullname]," ")>0,
           InStrRev([fullname]," ")-1,Len([fullname]))) As AName 
      FROM possibles) p ,
           uniSelectedContacts u
WHERE  u.TheName Like p.AName & "*"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...