如何组合左连接?

时间:2011-04-13 20:57:41

标签: sql ms-access

在MS Access 2007查询中,如何组合以下2个查询?

SELECT Tests.Release, Testcases.TestCase, Tests.Result
FROM Tests LEFT JOIN Testcases ON Tests.TestCaseID=Testcases.ID;

SELECT Tests.Release, ResultEnums.Result
FROM Tests LEFT JOIN ResultEnums ON ResultEnums.ID=Tests.Result;

由于

4 个答案:

答案 0 :(得分:2)

Access有这个craptastic“功能”,需要你在括号中配对你的连接:

Select Tests.Release, Testcases.TestCase, Tests.Result, ResultEnums.Result
From (Tests
    Left Join TestCases
        On TestCases.TestCaseID = Tests.TestCaseID)
    Left Join ResultEnums
        On ResultEnums.ID = Tests.Result

此类查询可能会产生一些不良结果,具体取决于架构。如果对于给定的Tests行,返回多个TestCases行和多个ResultEnums行,则这些行将通过交叉产品相互组合。例如,如果给定的Tests行返回五行TestCases行和三行ResultEnums行,则该测试行将获得15行。但是,如果说ResultEnumsTests表的父级(因此对于每个Tests行,您只能获得一个ResultEnums值),那么这应该可以正常工作。< / p>

答案 1 :(得分:1)

我现在无法测试,但您肯定需要括号:

SELECT Tests.Release
     , Testcases.TestCase
     , Tests.Result
     , ResultEnums.Result
FROM ( Tests 
       LEFT JOIN Testcases
         ON Tests.TestCaseID=Testcases.ID
     ) 
     LEFT JOIN ResultEnums
       ON ResultEnums.ID=Tests.Result 
;

SELECT Tests.Release
     , Testcases.TestCase
     , Tests.Result
     , ResultEnums.Result
FROM ( Tests 
       LEFT JOIN ResultEnums
         ON ResultEnums.ID=Tests.Result
     )
     LEFT JOIN Testcases
       ON Tests.TestCaseID=Testcases.ID
; 

答案 2 :(得分:0)

SELECT Tests.Release, Testcases.TestCase, Tests.Result, ResultEnums.Result
FROM Tests LEFT JOIN Testcases ON Tests.TestCaseID=Testcases.ID
LEFT JOIN ResultEnums ON ResultEnums.ID=Tests.Result;

编辑我没有在Access上测试,但在SQL Server中你可以做类似的事情。

答案 3 :(得分:0)

一个非常天真/简化的解决方案就是简单地UNION ALL

SELECT Tests.Release, Testcases.TestCase, Tests.Result
FROM Tests LEFT JOIN Testcases ON Tests.TestCaseID=Testcases.ID;

UNION ALL
SELECT Tests.Release, NULL, ResultEnums.Result
FROM Tests LEFT JOIN ResultEnums ON ResultEnums.ID=Tests.Result;

修改:更新comment here

我认为这就是您想要的,Result表格中的ResultEnumsRelease表格中的Tests以及相关联的TestCase来自Testcases表格,其所有JOIN加密:

SELECT
    re.Result
    ,t.Release
    ,tc.TestCase
FROM
    Tests t
    LEFT JOIN TestCases tc ON t.TestCaseID = tc.ID
    LEFT JOIN ResultEnums re ON re.ID = t.Result