有这么一个配置表t_department_er,这个表里面有两个字段
C_DPT_CDE  销售部门
C_DPTACC_CDE  财务部门对于关系是销售部门和财务部门是多对一的关系,配置信息是:
C_DPT_CDE C_DPTACC_CDE
3101 4101
3102 4101
4101
3109 4101
3201 4201有这么一下销售清单
C_DPT_CDE 数量 
3101 1
3102 1
3109 1我向查出所用的4102部门的销售情况
SELECT count(*) 
FROM t_bill
WHERE  1=1    and exists (SELECT C_DPT_CDE FROM t_department_er WHERE C_DPTACC_CDE= '4202');
结果:
3SELECT count(*) 
FROM t_bill
WHERE  1=1    and C_DPT_CDE IN (SELECT C_DPT_CDE FROM t_department_er WHERE C_DPTACC_CDE= '4202');
结果:
0正确的是:0,但是为什么结果是这样,难道exist 不能够完全替代in吗?
我记得db2,可以用with替代in,oracle还有其他的方法替代in吗?

解决方案 »

  1.   

    是你的语句写错了,用EXISTS没做内外表关联
    SELECT count(*)
    FROM t_bill
    WHERE 1=1 and exists (SELECT C_DPT_CDE FROM t_department_er WHERE C_DPTACC_CDE= '4202'
    and b.C_DPT_CDE IN=d.C_DPT_CDE FROM);SELECT C_DPT_CDE FROM t_department_er WHERE C_DPTACC_CDE= '4202'  return TURE
    1=1  return TURE
    表 t_bill 里应该有3条数据 所以返回了个 3
      

  2.   

    或者用表连接SELECT count(*)
    FROM t_bill b, t_department_er d
    WHERE d.C_DPTACC_CDE= '4202' and b.C_DPT_CDE IN=d.C_DPT_CDE FROM