2012-01-20 93 views
4

我不是一名训练有素的程序员,所以试图做到这一点很困难。我得到了这个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 
+0

尝试改变<>来! = –

+0

[看起来您可能需要一些括号](http://nm1m.blogspot.com/2007/10/multiple-left-joins-in-ms-access.html) –

+0

我仍然收到该更改的错误。 – user1161512

回答

2

位猜测的(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 

BTW它通常是指外连接表列WHERE子句中的错误,除非你考虑的可能性,他们是NULL

1

当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查询来帮助自己。这将使得使用db引擎不会接受的语法创建查询变得困难。

编辑:如果此查询的目的是比较从销售人员和代理表AGENTNAME值,可能你会想尝试以此为WHERE子句:

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