暂无图片
oracle sql模糊查询问题
我来答
分享
JAY
2021-12-30
oracle sql模糊查询问题


select name from b where b.id in(select id from a)


b表的id字段的值包含a表的id字段的值,我想使用这种方式来查询数据好像不行,请问有什么办法实现吗。

已知B表的ID字段值包含A表的ID字段值,但是A表的ID字段值在哪个位置无规律,就是说不确定A表的值在B表的ID字段具体哪个位置。

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
chengang

难道是我理解错了吗。我觉得一句话就可以搞定了啊。

select name from b where
exists(select 1 from a where b.id like ‘%’||a.id||’%’)

暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
cqiwen
2021-12-30
你这个最优!
JAY
题主
2021-12-31
高手,谢谢
cqiwen

我这有个笨办法,可以尝试下:

SQL> create table a (id varchar2(20),name varchar2(30)); Table created. SQL> insert into a values('12ab','z3'); 1 row created. SQL> insert into a values('45cd','l4'); 1 row created. SQL> commit; Commit complete. SQL> create table b as select * from a; Table created. SQL> update b set id='012abc' where id='12ab'; 1 row updated. SQL> commit; Commit complete. SQL> select * from b; ID NAME -------------------- ------------------------------ 012abc z3 45cd l4 SQL> insert into b values ('67g','w5'); 1 row created. SQL> commit; Commit complete. SQL> select * from b; ID NAME -------------------- ------------------------------ 012abc z3 45cd l4 67g w5 SQL> create table c (name varchar2(40)); Table created. declare cursor cur1 is select id from a; v_id varchar2(100); a_id varchar2(100); v_sql varchar2(1000); begin open cur1; loop fetch cur1 into v_id; exit when cur1%notfound; dbms_output.put_line('v_id is:'||v_id); select '%'||v_id||'%' into a_id from dual; v_sql := 'insert into c select name from b where id like :1'; dbms_output.put_line(v_sql); execute immediate v_sql using a_id; end loop; close cur1; end; / SQL> select * from c; NAME ---------------------------------------- z3 l4
复制
暂无图片 评论
暂无图片 有用 0
打赏 0
JAY
题主
2021-12-31
谢谢,也很棒,只是不符合我这边业务,非常感谢
Kay

可以用select name from b inner join a on instr(b.id,a.id)>0

暂无图片 评论
暂无图片 有用 0
打赏 0
chengang
2021-12-31
如果是一对一,join可以,如果是多对多的匹配,你这个写法就会造成重复记录
DarkAthena

把表结构和数据拿出来举例

暂无图片 评论
暂无图片 有用 0
打赏 0
薛晓刚

select b.name from a,b where a.id=b.id不行吗?

感觉这是你要的。如果我没理解错的话

暂无图片 评论
暂无图片 有用 0
打赏 0
JAY
题主
2021-12-31
不好意思,是我表述不清楚,B表的ID字段和A表的ID字段不是等值的,B表的ID字段值是包含在B表的ID字段值里面的
回答交流
Markdown


请输入正文
提交
相关推荐
关于Oracle的异地备份,rman+恢复目录/exp/还是rman+nfs?
回答 1
你的这种情况那就rmanNFS比较合适,制定合理的备份策略,当源主机挂了后,rman备份的数据在远程备机上。exp不推荐,导出时有报错,保证不了数据完整性而且贼慢。
ORA-12541: TNS: no listener ; 但实际监听是正常的;
回答 3
已采纳
确认监听没问题的话防火墙看一下
小白提问:各位大佬,怎样查某用户名下的表和字段?
回答 2
黎琛给的很全面了。
oracle里clob字段怎么解析出来?
回答 1
已采纳
用plsqldevlop可以直接看的。
Oracle的这个数据可以删除吗?
回答 3
不可以删除
两个sql差别不大,执行计划走的是同样的索引,可是cost差别却很大,请大神帮忙看看两个sql从底层而言,到底差别在哪?
回答 6
很大可能性是where条件返回的数据量和card表占比很大,比如card表数据量1000,where条件的结果集为800,此是执行计划是不会走索引的,因为索引回表的代价大于全表扫描的代价。
AWR分析报告问题求助:我这个报告严重的还挺多,但是核心问题在哪里呢?
回答 3
已采纳
1、行锁,查看topsql中dml类sql,可以看到awr中topelstime的update的sql正在执行中,建议排查是否业务有冲突。2、io性能差。按照awr报告看,这是个OLAP数据库吧。如果
oracle 支持跨库插入的时候开启并行吗?
回答 1
2011年ASKTOM里有这个帖子,说是不能https://asktom.oracle.com/pls/apex/f?p100:11:0::::P11QUESTIONID:35619679003465
如何修改oracle 11g rac 的asm实例密码
回答 1
参考如下文档重置:HowToRecreateTheASMPasswordFileAndChangeASMUsersPasswordOn11.2RAC.(DocID1638586.1)
Oracle几十亿大表怎么加索引效率高?
回答 2
已采纳
都这么大了,建议做分区表,根据业务需求做全局和分区索引