我有三张桌子。 TestOptionsTable包含要在仪器上执行的测试列表。
第二个表CreateScript是一个用于存储在测试期间运行的脚本的表。这些脚本包含一些存储在TestOptionsTable中的测试选择。脚本运行,测试逐个显示在屏幕上。
每个测试的结果都输入到屏幕上并存储在TestResultsTable中。保存时,列IsTestComplete标记为1,数据类型为BIT。
在运行脚本期间,用户可能会被中断,并且可能尚未执行某些单独的测试。测试恢复后,我想显示一个尚未完成的脚本中的测试列表。如果结果表中没有该测试的条目,则基本上从TestOptions和CreateScript中选择数据。到目前为止,我有这个,但没有返回任何东西:
select TestType,TestName, Limits
FROM CreateScriptTable
inner join TestOptionsTable on CreateScriptTable.TestName = TestOptionsTable.TestName
inner join TestResultsTable on CreateScriptTable.TestName = TestResultsTable.TestName
WHERE CreateScriptTable.InstrumentType= 'Instrument1'
AND TestResultsTable.IsTestComplete <> 1
ORDER BY [Index] ASC, TestName
如果在结果表中未将IsTestComplete列设置为true但未返回任何数据,则会返回数据。有没有人有任何想法?谢谢!
修改 预期输出如下所示。使用测试名称,类别和测试限制
Full Test 1 Visual 10 12
test1 Visual 0.1 0.22
Test 34 Visual 121 2222
Flow Test As Found 1 1.2
Test 2 As Found 1 1.1
Test 3 As Left 85 105
Test 6 As Left 95 103
任何不完整的测试都不会出现在测试结果表中。我想从CreateScript中选择任何不在结果表中的测试。
答案 0 :(得分:1)
你说
任何不完整的测试都不会出现在 结果表。
这意味着您无法使用INNER JOIN将两个第一个表与结果相关联 可能你应该用这样的LEFT JOIN重写你的查询
select TestType,TestName, Limits
FROM CreateScriptTable
inner join TestOptionsTable on CreateScriptTable.TestName = TestOptionsTable.TestName
left join TestResultsTable on CreateScriptTable.TestName = TestResultsTable.TestName
WHERE CreateScriptTable.InstrumentType= 'Instrument1'
AND TestResultsTable.IsTestComplete IS NULL
ORDER BY [Index] ASC, TestName