使用EXISTS的TSQL返回的记录多于预期

时间:2014-06-05 21:29:25

标签: tsql exists

查询有问题或我对存在应该如何运作有所了解。

我想通过id返回重复列表来隔离和消除。

查询:

select id
     , ref_id
from assets
where exists
(
    select ref_id
    from assets
    where ref_id is not null
    group by ref_id
    having count(id)>1
)

子查询正好返回我期望的内容,但整个查询返回所有资产记录。我认为它应该只在子查询中包含它。

请告知

1 个答案:

答案 0 :(得分:0)

您需要在exists:

中使用外部表中的字段
select id
     , ref_id
from assets _assets
where exists
(
    select ref_id
    from assets _existingAssets
    where ref_id is not null
    and _existingAssets.ref_id = _assets.ref_id
    group by ref_id
    having count(id)>1
)

您也可以使用in caluse执行此操作:

select id
     , ref_id
from assets
where ref_id in
(
    select ref_id
    from assets
    where ref_id is not null
    group by ref_id
    having count(id)>1
)