oracle ora00920,为什么执行不了报错 ORA-00920: invalid relational operator

本文讨论了SQL查询中使用NOT IN与NOT EXISTS的区别及其对索引的影响,并提供了具体的SQL代码示例来展示如何优化查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL codeSELECT T4.BUSSELFNO,

T4.LINENAME,

T4.BUSCLASS,

T4.DRIVERACODE,

T4.DRIVERANAME,

T4.FIRSTTIME,

TO_CHAR('') AS DRIVERBCODE,

TO_CHAR('') AS DRIVERBNAME,

TO_DATE('', 'YYYY-MM-DD HH24:MI:SS') AS CHANGETIME

FROM PI_BUSINFO T1

LEFT JOIN V_PI_DISPATCHPLAN_CCY T4

ON T1.BUSSELFNO = T4.BUSSELFNO

WHERE T1.AREAOWNER = 0

AND T1.BUSSTATUS <> 0

AND SYSDATE > T4.FIRSTTIME

--AND T4.BUSSELFNO NOT IN

AND NOT EXISTS

(SELECT T6.BUSSELFNO

FROM V_PI_POSINOUT_CCY T6

WHERE T6.ENTERTIME BETWEEN

TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd') || ' ' || '00:00:00',

'yyyy-mm-dd hh24:mi:ss') AND

TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd') || ' ' || '23:59:59',

'yyyy-mm-dd hh24:mi:ss')

AND T6.BUSSELFNO = T4.BUSSELFNO

UNION ALL

SELECT T7.BUSID

FROM PI_INOUT T7

WHERE T7.ENTERTIME BETWEEN

TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd') || ' ' || '00:00:00',

'yyyy-mm-dd hh24:mi:ss') AND

TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd') || ' ' || '23:59:59',

'yyyy-mm-dd hh24:mi:ss')

AND T7.BUSSELFNO = T4.BUSSELFNO);

------解决方案--------------------

补充一点:在T6和T7的 BUSSELFNO 字段上建一个索引。

另外:V_PI_POSINOUT_CCY 如果是个视图的话,建议先把数据查出来放到临时表中,建立索引再查询临时表的数据。探讨

1、先回答你得第二个问题

你的t7.entertime 和 t6.entertime 上面肯定有索引。

你得第一种写法在 这个字段上加了一个 trunc 函数,导致索引失效了,而第二个没有导致索引失效,原因就是这么简单。

2、再回答你的第一个问题,not in 和 not exists 不能等价的替换的,有一点点小区别,not exists 里面需要跟主表有关联关系的,根据你写的sql,……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值