问题描述
|
在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中,您可以执行类似于此的操作。