如何结合左联接?

问题描述

| 在MS Access 2007查询中,如何合并以下两个查询
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;
谢谢     

解决方法

我现在无法测试,但是您肯定需要括号:
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,ResultEnums.Result
FROM ( Tests 
       LEFT JOIN ResultEnums
         ON ResultEnums.ID=Tests.Result
     )
     LEFT JOIN Testcases
       ON Tests.TestCaseID=Testcases.ID
; 
    ,Access具有这种令人难以置信的\“功能\\”,它要求您在括号中将联接配对:
Select Tests.Release,ResultEnums.Result
From (Tests
    Left Join TestCases
        On TestCases.TestCaseID = Tests.TestCaseID)
    Left Join ResultEnums
        On ResultEnums.ID = Tests.Result
根据架构的不同,这种类型的查询可能会产生一些不好的结果。如果对于给定的“ 4”行,返回多个“ 5”行和多个“ 6”行,则这些行将通过叉积相互组合。例如,如果给定的“ 4”行返回了5个“ 5”行和3个“ 6”行,则该Tests行将获得15行。但是,如果说
ResultEnums
Tests
表的父项(因此,每
Tests
行,您将只获得一个
ResultEnums
值),那么这应该可以正常工作。     ,一个非常幼稚/简化的解决方案是将它们简单地“ 14”:
SELECT Tests.Release,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;
编辑:在这里更新以发表评论 我想这就是您想要的,从
ResultEnums
表中的
Result
,从
Tests
表中的
Release
,以及从ѭ21the表中的相关联
TestCase
,它们的键都all22ѭ:
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
    ,
SELECT Tests.Release,ResultEnums.Result
FROM Tests LEFT JOIN Testcases ON Tests.TestCaseID=Testcases.ID
LEFT JOIN ResultEnums ON ResultEnums.ID=Tests.Result;
编辑我没有在Access上进行测试,但是在SQL Server中,您可以执行类似于此的操作。