结合LEFT JOINS和INNER JOINS的MS ACCESS SQL问题

时间:2018-06-07 20:06:29

标签: sql ms-access

在编写我自己的SQL查询时,MS Access一直在扼杀我,我讨厌它的GUI查询工具。我放弃了试图结合LEFT JOINS和INNER JOINS,现在我正在做所有的内部联接,我仍然被谋杀。有人可以链接到我一个易于理解的MS Access SQL指南和/或告诉我这里我做错了什么。我已经尝试将我的代码放在括号中,将我的字段括起来。我的智慧结束了。

SELECT answers.* 
FROM (((answers
INNER JOIN caseInfo 
    ON answers.[ABAWDNum] = caseinfo.[ABAWDNum])
INNER JOIN Questions)
     ON answers.[questionID] = questions.[questionID]) 
INNER JOIN responseCodes 
    ON answers.[responseIDCode] = responseCodes.[responsecode]

我不确定我的错误图片是否会出现,但它在FROM子句中显示Sytnax错误,并且在提到问题表之后它有正确的括号 enter image description here

编辑:数据库关系: enter image description here

3 个答案:

答案 0 :(得分:1)

我相信这会为您提供符合您加入条件的表格答案中的所有字段。

SELECT answers.* 
FROM answers
INNER JOIN caseInfo 
    ON answers.[ABAWDNum] = caseinfo.[ABAWDNum]
INNER JOIN Questions
     ON answers.[questionID] = questions.[questionID]
INNER JOIN responseCodes 
    ON answers.[responseIDCode] = responseCodes.[responsecode]

答案 1 :(得分:1)

Access INNER JOIN一次只能处理两个数据集,因此如果要连接两个以上的表,则必须使用括号嵌套INNER JOINS,如下所述:

https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb208854(v=office.12)

从该页面上可以看出执行此操作的语法是......

SELECT fields FROM table1 INNER JOIN (table2 INNER JOIN [( ]table3 [INNER JOIN [( ]tablex [INNER JOIN …)] ON table3.field3compoprtablex.fieldx)] ON table2.field2compoprtable3.field3) ON table1.field1compoprtable2.field2;

答案 2 :(得分:0)

只是幽默访问我使用GUI /设计模式来构建查询。

这是我运行的查询。从一个包含674条记录的表中,它只返回了6个答案,但这是一个我必须处理的单独问题。至少这件事情有效。

但是我有一种感觉,一旦我开始要求左联合,我就遇到了麻烦。 < _< F *访问。

SELECT answers.*
FROM (Questions 
INNER JOIN (CaseInfo 
INNER JOIN answers ON CaseInfo.ABAWDNum = answers.ABAWDNum)
    ON Questions.questionID = answers.questionID)
INNER JOIN responseCodes ON (Questions.questionID = responseCodes.questionCode) 
                         AND (answers.responseIDCode = responseCodes.responseCode);

修改

我再次使用GUI / Designer尝试进行更接近我需要的查询,这是答案表中的所有答案加上问题表,caseinfo表和响应码表中的一些内容,这就是我得到的

SELECT 
    CaseInfo.ABAWDNum, CaseInfo.Admin, CaseInfo.Unit, 
    CaseInfo.[ASV-DRV  Completed By], CaseInfo.reviewerID, CaseInfo.[Recieved Date], 
    CaseInfo.[Date Reviewed], 
    Questions.Question, 
    answers.responseIDCode, responseCodes.responseDescription, answers.comments
FROM 
    CaseInfo 
RIGHT JOIN 
    ((Questions 
RIGHT JOIN 
    answers ON Questions.questionID = answers.questionID) 
LEFT JOIN 
    responseCodes ON answers.responseIDCode = responseCodes.responseCode)
     ON CaseInfo.ABAWDNum = answers.ABAWDNum;

这真的很疯狂。我真的很难学习这个。看起来访问非常特别关于它是如何加入的,但这似乎给了我正确的结果。返回了674条记录。