1

SQL クエリのヘルプが必要です。

TestOptions、CreateScript、および TestResults の 3 つのテーブルがあります。

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 に答える