不支持左联接SQL联接表达式

不支持左联接SQL联接表达式,sql,ms-access,join,left-join,Sql,Ms Access,Join,Left Join,我找不到此SQL表达式有什么问题: SELECT DISTINCT PNLTERM.TAGSTRIP, TERMS.TERM, PNLTERM.STRIPSEQ, TERMS.WIRENO, TERMS.REF, TERMS.MFG, TERMS.CAT, TERMS.BLOCK, PNLTERM.HDL, TERMS.WDBLKNAM, TERMS.JUMPER_ID, WIREFRM2.WIRELAY FROM (PNLTERM LEFT JOIN TERMS ON PNLTERM.LI

我找不到此SQL表达式有什么问题:

SELECT DISTINCT PNLTERM.TAGSTRIP, TERMS.TERM, PNLTERM.STRIPSEQ, TERMS.WIRENO, 
TERMS.REF, TERMS.MFG, TERMS.CAT, TERMS.BLOCK, PNLTERM.HDL, TERMS.WDBLKNAM, 
TERMS.JUMPER_ID, WIREFRM2.WIRELAY
FROM (PNLTERM LEFT JOIN TERMS ON PNLTERM.LINKTERM = TERMS.LINKTERM) 
INNER JOIN WIREFRM2 ON TERMS.HDL = WIREFRM2.COMP_HDL;
这与pnltem/TERMS上的左连接有关;因为它适用于内部和右侧连接,但不适用于左侧连接。 错误为“不支持联接表达式”


有什么想法吗?

MS Access在使用左/右连接和内部连接时有一些规则。具体来说,有一条关于其混合的规则。解释如下:

左联接或右联接可以嵌套在内部联接中,但内部联接不能嵌套在左联接或右联接中

您有两个选项:可以将第二个联接转换为左联接:

SELECT DISTINCT PNLTERM.TAGSTRIP, TERMS.TERM, PNLTERM.STRIPSEQ, TERMS.WIRENO, 
TERMS.REF, TERMS.MFG, TERMS.CAT, TERMS.BLOCK, PNLTERM.HDL, TERMS.WDBLKNAM, 
TERMS.JUMPER_ID, WIREFRM2.WIRELAY
FROM (PNLTERM LEFT JOIN TERMS ON PNLTERM.LINKTERM = TERMS.LINKTERM) 
LEFT JOIN WIREFRM2 ON TERMS.HDL = WIREFRM2.COMP_HDL;
或者,您可以更改查询,以便先进行内部联接:

SELECT DISTINCT PNLTERM.TAGSTRIP, TERMS.TERM, PNLTERM.STRIPSEQ, TERMS.WIRENO, 
TERMS.REF, TERMS.MFG, TERMS.CAT, TERMS.BLOCK, PNLTERM.HDL, TERMS.WDBLKNAM, 
TERMS.JUMPER_ID, WIREFRM2.WIRELAY
FROM (WIREFRM2 INNER JOIN TERMS ON TERMS.HDL = WIREFRM2.COMP_HDL) 
RIGHT JOIN PNLTERM ON PNLTERM.LINKTERM = TERMS.LINKTERM;

可能是那些不必要的括号。我读到的所有其他内容似乎都表明这些错误是在括号不够的情况下发生的!这只是表示首先执行左连接。为了使查询在语义和语法上正确,不需要括号。查询优化器在计算最有效的操作顺序(基于索引和统计数据)方面几乎总是比您做得更好。谢谢@cha,如果我将您第二个建议中的内部连接更改为正确的连接,我认为这将实现我想要的结果,现在是另一个问题。似乎我不能将右连接放在最后?查看您的查询,我可以看到两个左连接应该更适合您的情况。我需要在pnltem表中包含所有记录。据我所知,这只能通过右连接来实现,还是我的第一个先左连接的方法?