存在查询返回错误结果的位置

时间:2012-05-18 17:37:49

标签: sql

此处的内部查询返回仅出现在其中一个表中的值。外部查询应该返回那些的计数。相反,它返回整个表,而不仅仅是NULL值。

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

工作并做我想要的。我想(使用像这样的子查询方法)使用外部查询来返回内部查询返回的行数。

2 个答案:

答案 0 :(得分:1)

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

and i.icd_id = tblicd.icd_id

(或tblicd表的id是什么)

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