0

我有父 + 参考表,其中参考表如下

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 个表(取决于用户选择),因此性能是一个重要因素

4

2 回答 2

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 回答
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 不同,所以他把它们都返回了。都符合查询规则 在此处输入图像描述

于 2012-09-27T06:31:39.697 回答