我正在尝试找出一种仅显示基于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

10-02 18:19