SQL从一个表中选择连接表上的WHERE子句

时间:2013-01-02 11:08:08

标签: sql vb.net

我有三张桌子。 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中选择任何不在结果表中的测试。

1 个答案:

答案 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