gpt4 book ai didi

database - LEFT JOIN 不返回 MS Access 左表中的所有行?

转载 作者:搜寻专家 更新时间:2023-10-30 19:58:25 26 4
gpt4 key购买 nike

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

我想得到的是

Testcase Result
TC-1 OK
TC-5 <empty>
TC-8 FAIL

我得到的是

Testcase Result
TC-1 OK
TC-8 FAIL

查询:

SELECT Testcases.Testcase, Tests.Result
FROM Testcases LEFT JOIN Tests ON Testcases.ID=Tests.TestCaseID
WHERE Tests.Release="1.1.111";

最佳答案

有两种(微妙的)不同的方法可以做到这一点:

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" 测试的测试用例。以及所有未经任何测试的测试用例。

注意:第一个查询无法在 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)

关于database - LEFT JOIN 不返回 MS Access 左表中的所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com