1

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

4

0 に答える 0