父子参考SQL查询

时间:2012-09-27 05:18:47

标签: sql sql-server sql-server-2008 tsql sql-server-ce

我有父+参考表在哪里 参考表如下

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 in(2,3) 使用连接而不是使用子查询 但是通过连接查询为父级返回重复项

感谢任何帮助

仅供参考 - 查询中有4-7个表(取决于用户选择),因此性能是一个重要因素

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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