我正在尝试找出一种仅显示基于DPA.value的联系人详细信息的方法,因此可以基于DPA值从输出列表中排除联系人,如果dpa值等于5,则排除联系人。如果DPA值=,则排除电子邮件地址3或4。如果值= 2或4,则排除电话
如果DB.OrganisationPersonnel.EmployedToDate)为空,则排除联系人
此代码似乎无法正常工作,我们将不胜感激。
SELECT
DB.OrganisationPersonnel.OrganisationID
, DB.OrganisationPersonnel.PersonnelID AS [if not ProductPAID =5]
, DB.Title.Name
, DB.Person.FirstName
, DB.Person.MiddleName
, DB.Person.LastName
, DB.OrganisationPersonnel.ActualJobTitle
, DB.Phone.Number AS [if ProductPAID <3]
, DB.Email.Email AS [if ProductPAID =2 or 5]
, DB.Person.ProductDPAID
, DB.ProductDPA.Name
FROM
(((DB.OrganisationPersonnel
INNER JOIN
(DB.Person
INNER JOIN
DB.Title
ON
DB.Person.TitleID = DB.Title.ID)
ON
DB.OrganisationPersonnel.PersonnelID = DB.Person.ID)
LEFT JOIN
DB.Phone
ON
DB.OrganisationPersonnel.PhoneID = DB.Phone.ID)
LEFT JOIN
DB.Email
ON
DB.OrganisationPersonnel.EmailID = DB.Email.ID)
INNER JOIN
DB.ProductDPA
ON
DB.Person.ProductDPAID = DB.ProductDPA.ID
WHERE
(((DB.OrganisationPersonnel.EmployedToDate) Is Null))
ORDER BY
DB.OrganisationPersonnel.OrganisationID;
我试图在其他地方添加其他内容,但无法解决如何避免出现错误的问题。任何帮助将不胜感激,因为我是SQL的新手。
最佳答案
首先,在FROM
子句中不需要任何括号。只需删除它们。数据库引擎查询优化器将以最佳顺序为您执行联接。
接下来,您在ON
上下文中遇到语法错误。您应该使用AND
表达式来组合多个匹配项,因为它只是一个布尔表达式。而不是写
ON
DB.Person.TitleID = DB.Title.ID)
ON
DB.OrganisationPersonnel.PersonnelID = DB.Person.ID)
确实写
ON DB.Person.TitleID = DB.Title.ID
AND DB.OrganisationPersonnel.PersonnelID = DB.Person.ID