oracle数据库IN
答案:2 悬赏:80 手机版
解决时间 2021-11-09 07:45
- 提问者网友:暮烟疏雨之际
- 2021-11-08 07:04
oracle数据库IN
最佳答案
- 五星知识达人网友:渊鱼
- 2021-11-08 08:21
有点麻烦,就是你要把你的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表换成你的临时表就可以了。找到后清空或删除你的临时表(根据业务需要)追问恩 谢谢你啊 最后一问 我200个ID都输放好了 怎样才能快速存到临时表里 一个一个insert的话 太慢 有没有效率高的 3Q 麻烦你了追答你的ID是传入的参数吗?如果是这样的话,可以不用建立临时表,假设:
String ids="1,2,3,4"
StringBuffer s = new StringBuffer();
for(int i:ids)
{
s.append(" select ").append(i).append(" as id union");
}
//此处截取s字符串到最后一个空格,即去掉最后一个“union"
String newstr = s.toString().substring(0,s.toString().lastIndexOf(" "));
然后:
sql="select * from ("+newstr +") a where not exists
(select 'x' FROM new_tel n where id in(1,2,3,4) and n.id=a.id)"
执行就可以了。
用 not exists 更快
如果没有用到JAVA,而且ID还是已知的,你只是想要SQL,有个笨办法,就是把ID放到文本文件中,用查找替换的办法,查找“,”,替换成“ as id union select ” 注意前后空格,然后最开始加上select 最后加上 as id 就能得到这个常量串了
快速insert 的办法就是 insert into 临时表 as 上面的常量串
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表换成你的临时表就可以了。找到后清空或删除你的临时表(根据业务需要)追问恩 谢谢你啊 最后一问 我200个ID都输放好了 怎样才能快速存到临时表里 一个一个insert的话 太慢 有没有效率高的 3Q 麻烦你了追答你的ID是传入的参数吗?如果是这样的话,可以不用建立临时表,假设:
String ids="1,2,3,4"
StringBuffer s = new StringBuffer();
for(int i:ids)
{
s.append(" select ").append(i).append(" as id union");
}
//此处截取s字符串到最后一个空格,即去掉最后一个“union"
String newstr = s.toString().substring(0,s.toString().lastIndexOf(" "));
然后:
sql="select * from ("+newstr +") a where not exists
(select 'x' FROM new_tel n where id in(1,2,3,4) and n.id=a.id)"
执行就可以了。
用 not exists 更快
如果没有用到JAVA,而且ID还是已知的,你只是想要SQL,有个笨办法,就是把ID放到文本文件中,用查找替换的办法,查找“,”,替换成“ as id union select ” 注意前后空格,然后最开始加上select 最后加上 as id 就能得到这个常量串了
快速insert 的办法就是 insert into 临时表 as 上面的常量串
全部回答
- 1楼网友:千夜
- 2021-11-08 08:58
select 1 as you, VIN.* from VIN where ID in ('xx','xx','xx',.......)
union all
select 1 as meiyou, VIN.* from VIN where ID not in ('xx','xx','xx',.......)
1就是存在的 2就是不存在的追问我可能说的不够详细 是这个样子 主要是我想知道 IN里面的ID 哪些是没有查出数据来的 因为我要查到的ID 有200个 但是 我用 where ID in (200个ID) 但是实际我只得出来180条数据 所以我想知道在 那200 ID里面没有得出数据的那20个ID 是哪些ID追答你这就要写一个存储过程去处理你那些ID了 然后把ID插到一个表里去 然后和这个表去比较 这样就能得到你要的那些数据!~
你可以用objectbrower这个工具 然后把你的那些id粘到excel里 直接一复制就可以复制到表里去!~
union all
select 1 as meiyou, VIN.* from VIN where ID not in ('xx','xx','xx',.......)
1就是存在的 2就是不存在的追问我可能说的不够详细 是这个样子 主要是我想知道 IN里面的ID 哪些是没有查出数据来的 因为我要查到的ID 有200个 但是 我用 where ID in (200个ID) 但是实际我只得出来180条数据 所以我想知道在 那200 ID里面没有得出数据的那20个ID 是哪些ID追答你这就要写一个存储过程去处理你那些ID了 然后把ID插到一个表里去 然后和这个表去比较 这样就能得到你要的那些数据!~
你可以用objectbrower这个工具 然后把你的那些id粘到excel里 直接一复制就可以复制到表里去!~
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯