1

在 SQL 查询方面需要一些帮助。

我有三个表 TestOptions、CreateScript 和 TestResults。

Testoptions 保存特定测试的所有数据。CreateScript 保存按顺序运行的测试集合,用索引表示。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

仅显示结果表中条目的测试。

可能我没有正确接近连接。我已经搞砸了内部,左,右和完全连接,但无济于事,现在很困惑。

4

1 回答 1

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
于 2013-01-24T18:28:29.087 回答