簡體   English   中英

SQL從一個表中選擇帶有聯接表的WHERE子句

[英]SQL Selecting from one table with WHERE clause on the joined tables

我有三張桌子。 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 Column尚未設置為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中選擇結果表中沒有的任何測試。

你說

結果表中將根本不存在任何不完整的測試。

這意味着您不能使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM