0

親+参照テーブルがあり、参照テーブルは次のとおりです

Ref_ID    PARENT_ID    
-------------------
1           1            
2           1            
1           2       
3           2       
1           3       
3           3       
4           3       
2           4       
3           4       

サブクエリを使用する代わりに結合を使用して ( 2, 3 ) のすべての個別の親行 WHERE ref_id を返そうとしていますが、結合クエリを介して親に対して重複が返されています

どんな助けでも大歓迎です

参考までに - クエリには (ユーザーの選択に応じて) 4 ~ 7 個のテーブルがあるため、パフォーマンスが大きな要因となります

4

2 に答える 2

0

Ok、

まずはコード

DECLARE @Temp TABLE(
Ref_ID int,
ParentID int
)

INSERT INTO @Temp VALUES (1 , 1)
INSERT INTO @Temp VALUES (2 , 1)
INSERT INTO @Temp VALUES (1 , 2)
INSERT INTO @Temp VALUES (3 , 2)
INSERT INTO @Temp VALUES (1 , 3)
INSERT INTO @Temp VALUES (3 , 3)
INSERT INTO @Temp VALUES (4 ,3)
INSERT INTO @Temp VALUES (2 , 4)
INSERT INTO @Temp VALUES (3 , 4)

--First Example witout Ref_ID
SELECT 
  DISTINCT ParentID
FROM @Temp
WHERE Ref_ID IN (2,3)

--SECOND Example With Ref_ID
SELECT 
   DISTINCT ParentID,
   Ref_ID
FROM @Temp
WHERE Ref_ID IN (2,3)

最初のクエリは、ParentID の個別のレコードを返します。Ref_Id も要求していないため、正常に動作します。

Ref_ID も要求するときに説明するために、クエリは個別の ParentID を返そうとします。しかし、レコードを見てください。4 に等しい 2 つの ParentID がありますが、Ref_ID が異なるため、両方が返されます。どちらもクエリ ルールに一致します ここに画像の説明を入力

于 2012-09-27T06:31:39.697 に答える
0

これを試して

select distinct parent_field1,parent_field2 
from parent left outer reference
on parent.parent_id=reference.parent_id
where reference.ref_id(2,3)
于 2012-09-27T06:14:04.277 に答える