SQL Server クエリの実行中に異常なクエリ結果に直面しました。
注意すべき重要なテーブルはCode_Structure_Typeです。これには、列Code_Structure_Type_Id smallint、Name char(50)、およびここでは使用されていない他のいくつかの列が含まれています。
マイクエリ
SELECT DISTINCT A1.A1_Id AS Code_Unit_Attribute_Id,
A1.Name AS Code_Unit_Attribute_Name,
Code_Structure_Type.A1_Name AS Code_Attribute_Type
--, Code_Structure_Type.Code_Structure_Type_Id
FROM Defect
INNER JOIN Defect_Code_Unit
ON Defect.Defect_Id = Defect_Code_Unit.Defect_Id
INNER JOIN Code_Unit
ON Defect_Code_Unit.Code_Unit_Id = Code_Unit.Code_Unit_Id
INNER JOIN A1
ON Code_Unit.A1_Id = A1.A1_Id
INNER JOIN ERA_Module
ON Defect.ERA_Module_Id = ERA_Module.ERA_Module_Id
INNER JOIN Code_Unit_Type
ON Code_Unit.Code_Unit_Type_Id = Code_Unit_Type.Code_Unit_Type_Id
INNER JOIN Code_Structure_Type
ON Code_Unit_Type.Code_Structure_Type_Id = Code_Structure_Type.Code_Structure_Type_Id
WHERE ERA_Module.ERA_Project_Id = 472
AND ERA_Module.Is_Active = 1
AND Defect.Is_Closed = 0
AND Defect_Code_Unit.Is_Active = 1
AND Code_Structure_Type.Name = 'Pega Rules'
--AND Code_Structure_Type.Code_Structure_Type_Id = 2
AND A1.A1_Id > 0
AND Code_Unit.Scope_Id = 1
このクエリは、正しくない単一の行を返します。'Pega Rules' Code_Structure_Type の欠陥がないため、このクエリの予想される結果は none になるはずです。
この行のコメントを外すと
--, Code_Structure_Type.Code_Structure_Type_Id
正しい結果が得られません。
また、Code_Structure_Type.Name ではなく「Pega Rules」用の Code_Structure_Type_Id からフィルタリングすると、正しい結果も得られますが、これはありません。これを行うには、この行のコメントを外します
--AND Code_Structure_Type.Code_Structure_Type_Id = 2
この行をコメントしてください
AND Code_Structure_Type.Name = 'Pega Rules'
したがって、基本的には同じことを行っており、テーブル Code_Structure_Type には「Pega Rules」のような名前はなく、近くにもありません。そのテーブルには 5 行しかありません。
ここで何が起こっているのかを理解する必要があります。
前もって感謝します。
実行計画へのリンク
「pega rules」のみを使用する場合のファイル - 「 pega rules」を使用する場合はerror_original.xml + select - idを使用する場合はcorrect_with_added_select.xml - correct_with_Id.xml