2012-05-18 189 views
0

此处的内部查询返回的值仅出现在其中一个表中。外部查询应该返回这些计数。相反,它返回整个表格,而不仅仅是NULL值。Where Exists查询返回错误结果

select count(*) from tblicd 
where exists 
(
select i.icd_id 
from tblicd i left outer join icd_jxn on icd_jxn.icd_id=i.icd_id 
where icd_jxn.icd_id is null 
) 

内部查询

select i.icd_id 
    from tblicd i left outer join icd_jxn on icd_jxn.icd_id=i.icd_id 
    where icd_jxn.icd_id is null 

作品和我想要做什么。我想(使用这样的子查询方法)使用外部查询来返回内部查询返回的行数。

+0

查询已编辑。 – wootscootinboogie

+0

如果没有外部查询,我会得到tblICD中出现的所有icd_id代码不会出现在icd_jxn中的列表。这工作正常。我想只返回该数字的外部查询。我想用这个子查询来熟悉它们。 – wootscootinboogie

+0

现在你没有在子查询中引用原始的'tblicd' .. – Aprillion

回答

1

你需要加入两个(内部和外部)tblicd表中的子查询:

and i.icd_id = tblicd.icd_id 

(或任何tblicd表的ID)

+0

编辑了我原来的查询。 – wootscootinboogie

+0

啊,完美。知道我错过了一些卑鄙的东西。 – wootscootinboogie

+0

'exists'对于“返回内部查询返回的行数”有点矫枉过正了。 – Aprillion

1

您发布查询不有道理。然而,从你的描述来看,这听起来像你有两张表,你正试图找到两个表中都不存在的任何ID。如果这是正确的,你应该尝试这样的事:

select count(*) as cnt 
from table1 t1 
    full outer join 
    table2 t2 
    on t1.id = t2.id 
where t1.id is null 
     or t2.id is null 

这可能不会在你使用的数据库的工作,但因为你没有告诉我们,我们不能定制解决方案来满足您的SQL的方言。


根据修订的问题,你可以简化这个多种方式:

select count(*) 
from tblicd 
where not exists (select i.icd_id 
        from icd_jxn 
        where icd_jxn.icd_id = tblicd) 

select count(tblicd.icd_id) 
from tblicd 
    left join 
    icd_jxn 
    on tblicd.icd_id = icd_jxn.icd_id 
where icd_jxn.icd_id is null 

select count(tblicd.icd_id) 
from tblicd 
where icd_id not in (select icd_id 
        from icd_jxn) 

基本上,没有理由从tblicd选择两次。

+0

所以我可以帮助更好在将来写问题,我的查询怎么没有意义(在我编辑之后)? – wootscootinboogie

+0

现在有道理。当我写到它处于中间状态时。 – Allan