需要一些SQL查询帮助。
我有三个表TestOptions,CreateScript和TestResults。
Testoptions包含特定测试的所有数据。 CreateScript包含按顺序运行的测试集合,由index表示。 TestResults持有结果。
我想显示特定乐器的测试列表。该列表将包含。 TestType,TestName,测试限制和结果。某些测试可能尚未执行,因此测试结果表中将没有该测试的条目。如果尚未执行测试,则仍需要检索测试详细信息。该列表将按索引排序并按TestType分组。
到目前为止,我已经:
SELECT TestType, TestName, LowerLimits, UpperLimits, ResultRecorded
FROM CreateScriptTable
INNER JOIN TestOptionsTable ON CreateScriptTable.TestName =T estOptionsTable.TestName
LEFT JOIN TestResultsTable ON CreateScriptTable.TestName = TestResultsTable.TestName
WHERE CreateScriptTable.InstrumentType= 'instType'
AND jobNo ='000'
AND SerialNo ='000'
ORDER BY [Index] ASC, TestType
SerialNo和JobNo仅在TestResults表中。 此查询仅提供已在测试结果表中输入的测试的详细信息。如果测试已经完成,我想要所有的测试细节和结果。
预期输出如下:
TestType TestName Lower Upper Result
type1 test1 12 20 12
type1 test2 96 108 105
type2 test2 98 108
type3 test3 95 105
实际输出更像是
TestType TestName Lower Upper Result
type1 test1 12 20 12
type1 test2 96 108 105
仅测试结果表中的条目显示。
可能我没有正确接近连接。我已经弄乱了内,左,右和完全连接,但无济于事,现在我很难过。
答案 0 :(得分:2)
您可以将左连接表中列的条件从WHERE
子句移动到JOIN
子句,以防止它们将左连接虚拟地更改为内部连接,如下所示:
SELECT TestType, TestName, LowerLimits, UpperLimits, ResultRecorded
FROM CreateScriptTable
INNER JOIN TestOptionsTable ON CreateScriptTable.TestName =TestOptionsTable.TestName
LEFT JOIN TestResultsTable ON CreateScriptTable.TestName = TestResultsTable.TestName AND jobNo ='000' AND SerialNo ='000'
WHERE CreateScriptTable.InstrumentType= 'instType'
ORDER BY [Index] ASC, TestType