2012-09-27 87 views
0

我有父+参考表,其中 参考表如下父子参考SQL查询

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

试图返回WHERE REF_ID在(2,3) 使用连接,而不是使用所有不同父行子查询 但重复正在经由连接查询

返回父任何帮助理解

FYI - 有在查询表4-7(取决于用户选择),因此性能是一个巨大的因素

回答

0

好吧,

首先代码

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。但看看你的记录,你有两个ParentID的等于4 但与不同的Ref_ID,所以他返回他们俩。他们都符合查询规则 enter image description here

+1

感谢您的洞察力,我猜想我希望可能有一个“神奇的条款”,以无效或子查询无效:) – Kumar

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)