Pab*_*blo 2 database ms-access ms-access-2007
Testcases table
---------------
ID Testcase
1 TC-1
2 TC-5
3 TC-8
Tests table
-----------
ID TestCaseID Result Release
1 1 OK 1.1.111
2 3 FAIL 1.1.111
Run Code Online (Sandbox Code Playgroud)
我想得到的是
Testcase Result
TC-1 OK
TC-5 <empty>
TC-8 FAIL
Run Code Online (Sandbox Code Playgroud)
我得到的是
Testcase Result
TC-1 OK
TC-8 FAIL
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT Testcases.Testcase, Tests.Result
FROM Testcases LEFT JOIN Tests ON Testcases.ID=Tests.TestCaseID
WHERE Tests.Release="1.1.111";
Run Code Online (Sandbox Code Playgroud)
有两种(巧妙地)不同的方法可以做到这一点:
SELECT Testcases.Testcase
, Tests.Result
FROM Testcases
LEFT JOIN Tests
ON ( ( Testcases.ID = Tests.TestCaseID )
AND ( Tests.Release = "1.1.111" )
)
Run Code Online (Sandbox Code Playgroud)
和:
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
Run Code Online (Sandbox Code Playgroud)
插入一个多行插入表中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 )
Run Code Online (Sandbox Code Playgroud)
要么
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" )
)
Run Code Online (Sandbox Code Playgroud)
甚至更好(因为它可以在设计模式下显示):
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3930 次 |
| 最近记录: |