有两种(微妙的)不同的方法可以做到这一点:
SELECT Testcases.Testcase
, Tests.Result
FROM Testcases
LEFT JOIN Tests
ON ( ( Testcases.ID = Tests.TestCaseID )
AND ( Tests.Release = "1.1.111" )
)
和:
SELECT Testcases.Testcase
, Tests.Result
FROM Testcases
LEFT JOIN Tests
ON Testcases.ID = Tests.TestCaseID
WHERE Tests.Release = "1.1.111"
OR Tests.TestCaseID IS NULL
在表Testcases中再插入一行,ID=4, Testcase=20
并在表Tests 中输入一行,用TestCaseID=4 Result="Whatever" Release="2.2.37" 来查看这两个选项之间的区别。
简而言之,第一个查询将显示所有测试用例,结果仅显示具有Release="1.1.111" 的测试,其余测试用例将显示结果为空(NULL)。
第二个将只显示带有Release="1.1.111" 的测试用例。还有所有没有任何测试的Testcase。
注意:第一个查询不能在 Access 的“设计”模式下显示。您可以将其保存为 SQL 模式,但如果您关闭并重新打开它,Access 会出于未知原因删除一些括号。你仍然可以运行它。
它(第一个查询)也可以写成:
SELECT Testcases.Testcase
, g.Result
FROM Testcases
LEFT JOIN
( SELECT *
FROM Tests
WHERE ( Tests.Release = "1.1.111" )
)
AS g
ON ( Testcases.ID = g.TestCaseID )
或
SELECT Testcases.TestCase
, Tests.Result
FROM Testcases
INNER JOIN Tests
ON ( Testcases.ID = Tests.TestCaseID )
WHERE ( Tests.Release = "1.1.111" )
UNION ALL
SELECT Testcases.TestCase, NULL
FROM Testcases
WHERE NOT EXISTS
( SELECT 1
FROM Tests
WHERE ( Testcases.ID = Tests.TestCaseID )
AND ( Tests.Release = "1.1.111" )
)
甚至更好(因为它可以在设计模式下显示):
SELECT Testcases.Testcase
, IIf((Tests.Release="1.1.111"), Tests.Result, Null)
AS Result
FROM Testcases
LEFT JOIN Tests
ON Testcases.ID = Tests.TestCaseID
GROUP BY Testcases.Testcase
, IIf((Tests.Release="1.1.111"), Tests.Result, Null)