此处的内部查询返回仅出现在其中一个表中的值。外部查询应该返回那些的计数。相反,它返回整个表,而不仅仅是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
工作并做我想要的。我想(使用像这样的子查询方法)使用外部查询来返回内部查询返回的行数。
答案 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
两次。