0

此处的内部查询返回仅出现在其中一个表中的值。外部查询应该返回这些的计数。相反,它返回整个表,而不仅仅是 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

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

4

2 回答 2

1

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

and i.icd_id = tblicd.icd_id

(或任何表的 id tblicd

于 2012-05-18T17:42:41.057 回答
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两次。

于 2012-05-18T17:53:18.870 回答