在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;
由于
答案 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行。但是,如果说ResultEnums
是Tests
表的父级(因此对于每个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
表格中的ResultEnums
,Release
表格中的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