有这么一个配置表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吗?
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
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