Это работает:
SELECT left([aname],InStr(1,[aname],",")-1) & " "
& right([aname],Len(aname)-InStr(1,[aname],",")) & " "
& summary_judgment.middle_initial AS fullname
INTO SummaryJudgment_FinalForgottenWithMiddle
FROM SummaryJudgment_FinalForgotten, summary_judgment;
Хотя вы можете вместо этого:
SELECT left([aname],InStr(1,[aname],",")-1) & ", "
& right([aname],Len(aname)-InStr(1,[aname],",")) & " "
& summary_judgment.middle_initial AS fullname
INTO SummaryJudgment_FinalForgottenWithMiddle
FROM SummaryJudgment_FinalForgotten, summary_judgment;
Вторая версия дает вам запятую после фамилии.Обратите внимание, что Right считает из вправо, поэтому вы должны вычесть значение InStr из длины.
EDIT:
КодЯ дал выше работы с вашими примерами данных - по одной строке в каждой таблице.С большим количеством строк он дает перекрестный продукт (LastName, FirstName) x MiddleInitial.Мне пришло в голову, что это может быть так, поэтому я вернулся к своему тесту и добавил вторую строку - это - это true.И тогда я попытался написать выражение соединения ....
Доступ не похож на это:
... ON left([aname],InStr(1,[aname],",")-1) = last_name ...
Выдает ошибку «Выражение соединения не поддерживается».Если изменить его следующим образом:
... ON (trim((left(SummaryJudgment_FinalForgotten.aname,InStr(1,[aname],",")-1))=trim(summary_judgment.last_name))) ...
приводит к запросу, который запускает и создает таблицу, но не создает никаких строк (то же самое было до того, как я добавил вызовы "trim" в попытке исправитьэто).
Поэтому я попытался указать таблицу для всех случаев анаме.Никакой радости - пока я не осознал, что я делал неправильное сравнение (производные от последнего к последнему и производные от первого к последнему - упс).
Использование следующего предложения FROM с любым из указанных выше SELECT ... INTO работает правильно:
FROM
SummaryJudgment_FinalForgotten INNER JOIN
summary_judgment ON
((left(SummaryJudgment_FinalForgotten.aname,InStr(1,SummaryJudgment_FinalForgotten.[aname],",")-1))=summary_judgment.last_name) AND
((right(SummaryJudgment_FinalForgotten.aname,Len(SummaryJudgment_FinalForgotten.aname)-InStr(1,SummaryJudgment_FinalForgotten.[aname],","))=summary_judgment.first_name));
Это может работать даже без полной квалификации каждого поля теперь, когда я присоединяюсь сначала к первому и к последнему к последнему (так как нет дублированиячерез столы), но доказав, что это работает, я готов.