有三张表,企业表、企业操作员表、操作记录表企业表E
EID ENAME
企业操作员EUSER
USERID USERNAME
操作历史记录表JNL
JNLID JNLDATA JNLTIME其中一个企业下面有N个操作员
现在想统计出从未有操作员登录过本系统的企业(请注意是企业)
尽量不要用IN、NOT IN的写法,用最优化的写法
EID ENAME
企业操作员EUSER
USERID USERNAME
操作历史记录表JNL
JNLID JNLDATA JNLTIME其中一个企业下面有N个操作员
现在想统计出从未有操作员登录过本系统的企业(请注意是企业)
尽量不要用IN、NOT IN的写法,用最优化的写法
解决方案 »
- 在centos6.2,64位操作系统上安装oracle11gR2,出错,抛异常!该如何处理??
- oracle 10g 启动过程,输入alter database mount后出现2,求指教~
- oracle 10g 标准版 支持红帽子 as 5.1 吗?如果支持。是不是要装什么补丁啊?我怎么装不上啊?
- 存储过程如何调用函数?
- oracle数据库的应用结构之间究竟有什么区别?
- 学习中的迷茫
- oracle rac环境搭建
- 求一个sql语句树的计算
- 求一段时间去除星期六和星期天的SQL语句
- oracle redolog 无法查询到增删改语句,可以查询到表结构更新语句
- 一个SQL分组语句
- Oracle如何删除用户及用户下的全部数据?
EID ENAME
企业操作员EUSER
USERID USERNAME EID
操作历史记录表JNL
JNLID JNLDATA JNLTIME USERID
SELECT *
FROM E
WHERE NOT EXISTS (SELECT COUNT(1) FROM JNL A,EUSER B WHERE A.USERID = B.USERID AND B.EID = E.EID)
select * from E where not exists (select 1 from EUSER u, JNL j where u.userid=u.userid and e.eid=u.eid )
代码如下:SELECT E.EName
FROM E
WHERE NOT EXISTS(SELECT * FROM EUSER, JNL WHERE EUSER.USERID = JNL.USERID AND EUSER.EID = E.EID);
(select * from E ta join EUSER tb on ta.EID=tb.EID(+))t1
join
(select * from EUSER tb join JNL tc on tb.USERID =tc.USERID(+)) t2
on t1.USERID =t2.USERID(+) and t1.EID=t2.EID(+)
where t1.USERID is null or t2.JNLID is null
1)没有操作员的公司(不会有记录)
2)有操作员,但当没有操作记录的公司(没有记录)