oracle两个in之间用on还是or

oracle两个in之间用on还是or,第1张

在Oracle数据库中,两个IN之间使用OR,而不是ON。OR表示“或”,意味着查询将返回两个IN子句中的任何一个。例如,如果您有一个表,其中包含一列名为“城市”,您可以使用以下查询来查找城市为“伦敦”或“纽约”的行:SELECT * FROM table WHERE city IN ('London', 'New York') OR city = 'Paris'这将返回城市为“伦敦”、“纽约”或“巴黎”的行。

从两方面来说

(1)改用exists,这样的话查一遍就行了(虽然理论上是这样,不过我看执行计划没看出来),in的话是两遍

(2)尽量减少in内的数据,继续缩小范围,如果实在没办法减小范围,那就只能是多次查询(慎用,虽然说多次查询每次的量小了,但是多次查询也容易出问题),或者也可以用关联查询试试看(也就是不作为条件,而是作为一张表查询,查询后再关联,这样的话走hash可能会快,这个不一定,要看具体的执行计划)

有点麻烦,就是你要把你的ID重新组装一个SQL,比如你的ID是:1,2,3,4,而查出来的只有1,2,3的数据,4没有数据,你可以这么做:

select * from (select 1 as id union select 2 as id union select 3 as id union select 4 as id) a where id not in

(select id a FROM VIN n where id in(1,2,3,4) group by id)

得到id:4

你那么多ID的话,建议建立一个临时表,把你的200个ID存到这个表里去,然后SQL和上面一样,把a表换成你的临时表就可以了。找到后清空或删除你的临时表(根据业务需要)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10826215.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存