oracle in 改为exists形式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle in 改为exists形式相关的知识,希望对你有一定的参考价值。

SELECT
T00km010EO.CREATETIME,
T00km010EO.T00KM006ID,
T00km010EO.UUID,
T00km006EO.UUID AS UUID1
FROM T00KM010 T00km010EO, T00KM006 T00km006EO
--select ,from语句不能修改
WHERE
T00km010EO.T00KM006ID(+) = T00km006EO.UUID
and (T00km010EO.T00KM006ID||T00km010EO.CREATETIME) in (select b.t00km006id||max(b.createtime) as createtime from t00km010 b GROUP BY b.t00km006id)

in 好像有256个参数限制,不知道exists 是否有参数限制。。
这个SQL里面有个严格的限制,只能修改WHERE语句,不能修改select和where语句(表别名都不能起)

exists貌似需要表别名,不知道怎么修改。。哪位大神能够帮忙修改一下哈!

参考技术A SELECT t00km010eo.createtime
,t00km010eo.t00km006id
,t00km010eo.uuid
,t00km006eo.uuid AS uuid1
FROM t00km010 t00km010eo
,t00km006 t00km006eo
--select ,from语句不能修改
WHERE t00km010eo.t00km006id(+) = t00km006eo.uuid
AND EXISTS (SELECT 1
FROM t00km010 b
WHERE b.t00km006id || MAX(b.createtime) =
t00km010eo.t00km006id || t00km010eo.createtime
GROUP BY b.t00km006id)

望采纳追问

ORA-00934: group function is not allowed here
00934. 00000 - "group function is not allowed here"
*Cause:
*Action:
Error at Line: 11 Column: 13
你这个sql有问题

关于oracle中in和exists的区别

一般来说,这两个是用来做两张(或更多)表联合查询用的,in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,假设有A、B两个表,使用时是这样的:

1、select * from A where id in (select id from B)--使用in

2、select * from A where exists(select B.id from B where B.id=A.id)--使用exists
也可以完全不使用in和exists:

3、select A.* from A,B where A.id=B.id--不使用in和exists

具体使用时到底选择哪一个,主要考虑查询效率问题:

第一条语句使用了A表的索引

第二条语句使用了B表的索引

第三条语句同时使用了A表、B表的索引

如果A、B表的数据量不大,那么这三个语句执行效率几乎无差别;

如果A表大,B表小,显然第一条语句效率更高,反之,则第二条语句效率更高;

第三条语句尽管同时使用了A表、B表的索引,单扫描次数是笛卡尔乘积,效率最差。


以上是关于oracle in 改为exists形式的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中的exist和in

oracle出现shared memory realm does not exist怎么办啊

in exist,not in ,not exist

Oracle 性能调优

sql优化,in与exist , not in与not exist 的区别

Oracle中 inexistsnot in,not exists的比较