【问题标题】:Syntax error (missing operator)语法错误(缺少运算符)
【发布时间】:2012-01-20 21:30:54
【问题描述】:

我不是一个训练有素的程序员,所以很难做到这一点。我使用此 SQL 代码收到上述错误,但我无法找出原因。请指教。

SELECT a.agentname as 'Salesforce AgentName', a.loannumber, ag.agentname as 'portal agentname'
from salesforce a 
inner join portal b ON a.loannumber = b.loannumber

left join agents ag ON b.agentid = ag.agentid
where a.agentname <> ag.agentname

【问题讨论】:

标签: sql ms-access


【解决方案1】:

猜测一下 (based on here)

SELECT a.agentname  AS 'Salesforce AgentName',
       a.loannumber,
       ag.agentname AS 'portal agentname'
FROM   ((salesforce as a )
       INNER JOIN portal as b
         ON a.loannumber = b.loannumber)
       LEFT JOIN agents ag
         ON b.agentid = ag.agentid
WHERE  a.agentname <> ag.agentname  

顺便说一句,在WHERE 子句中引用外部联接表列通常是错误的,除非您考虑到它们可能是NULL

【讨论】:

    【解决方案2】:

    当您的 SELECT 语句包含超过 1 个连接时,Access 的数据库引擎对括号有严格的要求。我建议您从查询的简化版本开始(丢弃字段列表和 WHERE 子句),以便您可以专注于正确连接。

    SELECT *
    FROM
        (salesforce AS a
        INNER JOIN portal AS b
        ON a.loannumber = b.loannumber)
        LEFT JOIN agents AS
        ag ON b.agentid = ag.agentid;
    

    假设该版本有效,试试这个:

    SELECT
        a.agentname AS [Salesforce AgentName],
        a.loannumber,
        ag.agentname AS [portal agentname]
    FROM
        (salesforce AS a
        INNER JOIN portal AS b
        ON a.loannumber = b.loannumber)
        LEFT JOIN agents AS
        ag ON b.agentid = ag.agentid
    WHERE a.agentname <> ag.agentname;
    

    请注意,我用方括号而不是单引号将列名的别名括起来。单引号不会触发错误,但它们会包含在列标题中......我怀疑你想要。

    您可以通过在 Access 的查询设计器中构建 Access 查询来帮自己一个忙。使用数据库引擎不接受的语法创建查询将变得困难。

    编辑:如果此查询的目的是比较 salesforce 和 agent 表中的 agentname 值,也许您可​​能想尝试将其作为 WHERE 子句:

    WHERE a.agentname <> ag.agentname OR ag.agentname Is Null;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2016-08-20
      相关资源
      最近更新 更多