这听起来很简单,但是我尝试了许多不同的方法。这个查询设置得很奇怪,我试图加入它,但是没有通用的列可以使用。但是,在DOE,JOHN的上下文中编写了一个LastFirst列(由LastName和FirstName组成)。然后,在各列中,我尝试将其仅用作FirstName(John)和LastName(Doe)。
我实际上是在尝试从4个都返回1行的表中选择数据。这两个表可以连接:
month()
这个没有任何关系,所以我很可能将它合并,并使剩余的列为空:
SELECT
RIFQuery.*,
_Employee.EmployeeLastName + ', ' + _Employee.EmployeeFirstName AS EmployeeLastFirst,
_Employee.EmployeeTitle, _Employee.Phone As EmployeePhone,
_Employee.EmailAddress As EmployeeEmailAddress
FROM
RIFQuery
INNER JOIN
_Employee ON RIFQuery.CreatedBy = _Employee.AutoNumber
WHERE
RIFQuery.Autonumber = 1
这是包含要与RIFQuery.LastFirst联接的姓氏和名字的表:
SELECT *
FROM tblOrganization
在该WHERE语句中,代码将拆分LastFirst列,并通过搜索其LastName和FirstName获得行。我想知道是否可以将其写入JOIN?否则,我可能可以使用UNION并使其余的列为空,但是它将看起来非常难看。
更新
我从这里尝试了2条建议,均导致语法错误。我忘了提及我在Microsoft Access VBA中执行此代码并尝试检索DAO.RecordSet。我必须删除SELECT语句中的一些表名才能克服那里的语法错误,所以也许我应该更新问题以反映MS ACCESS而不是SQL Server,尽管只有查询是唯一的纯Access对象,其余的都是将ODBC表链接到SQL Server。
更新
只是其中的一个问题,直到问题解决,我才能入睡,直到问题解决为止,我都会沉迷。如果我从SELECT和JOIN语句中取出所有_Employee引用,则它想工作,但参数太少会出错。我现在知道这与_Employee有关。通过应用括号获得不同的结果,只是希望我能走运并付诸实践。
该错误是由以下行引起的:
SELECT
Gender As ClientGender, DOB As ClientDOB, SSN As ClientSSN
FROM
_Clients
WHERE
_Clients.LASTNAME = left(RIFQuery.LastFirst, len(RIFQuery.LastFirst)-CHARINDEX(',', REVERSE(RIFQuery.LastFirst)))
AND _Clients.FIRSTNAME = ltrim(substring(RIFQuery.LastFirst, len(RIFQuery.LastFirst)-CHARINDEX(',', REVERSE(RIFQuery.LastFirst))+2, len(RIFQuery.LastFirst)))
我收到此错误: “查询表达式中的语法错误(缺少运算符)”。
这是我正在使用的最新查询,减去括号:
INNER JOIN [_Employee] ON [_Employee].[AutoNumber] = [RIFQuery].[CreatedBy]
出于调试目的,如果我删除了最后两行和_Employee SELECT语句,它将毫无疑问地处理查询。如果有人有任何想法,请告诉我。
我一直把注意力集中在使RIFQuery JOIN语句成为最长原因的元凶上,但是我发现根本不再是问题了。话虽如此,该线程已基本解决,感谢您的帮助。
答案 0 :(得分:2)
在使用多个JOIN时,MS Access使用的语法与SQL Server略有不同。您可以使用_Clients
忽略JOIN(将其设为 cross join ),然后将该条件移至WHERE子句,这将使查询看起来像这样(并允许您以显示查询的设计窗口而没有任何问题)
SELECT RIFQuery.*,
EmployeeLastName + ', ' + EmployeeFirstName As EmployeeLastFirst,
EmployeeTitle, Phone As EmployeePhone, EmailAddress As EmployeeEmailAddress,
Gender As ClientGender, DOB As ClientDOB, SSN As ClientSSN
FROM _Clients, RIFQuery INNER JOIN _Employee ON RIFQuery.CreatedBy = _Employee.AutoNumber
WHERE RIFQuery.LastFirst = _Clients.LASTNAME & ", " & _Clients.FIRSTNAME;
我建议不要将以下查询另存为Access对象(也许是qryRIF
),而不是为了能够更改参数值而在VBA中组装查询字符串:
PARAMETERS lgRIF Long;
SELECT RIFQuery.*,
EmployeeLastName + ', ' + EmployeeFirstName As EmployeeLastFirst,
EmployeeTitle, Phone As EmployeePhone, EmailAddress As EmployeeEmailAddress,
Gender As ClientGender, DOB As ClientDOB, SSN As ClientSSN
FROM _Clients, RIFQuery INNER JOIN _Employee ON RIFQuery.CreatedBy = _Employee.AutoNumber
WHERE RIFQuery.LastFirst = _Clients.LASTNAME & ", " & _Clients.FIRSTNAME
AND RIFQuery.Autonumber = [lgRIF];
在您的VBA代码中,您可以使用以下代码来获取QueryDef对象,分配参数值并打开一个记录集:
With CurrentDb.QueryDefs!qryRIF
!lgRIF = lgRIF
With .OpenRecordset()
' ... your code ...
.Close
End With
.Close
End With