select PC.NAME,(case when instr(PC.sourcecode,tb_cp.sourcekpiid) > 0 then tb_cp.capesname else null end) from cp_kpi_info_fy tb_cp, cp_om_kpi_info_fy PCtb_cp.sourcekpiid这个字段里包含1个或者几个PC.sourcecode字段的值。我现在想列出PC表里NAME字段的所有值,如果PC表里的sourcecode被包含在tb_cp.sourcekpiid里,那么就列出tb_cp的capesname字段。
但是我用上面那个查询出PC表里几十倍的值,我想是因为2个表间没加左连接,但是2个表就我说的这个被包含的关系,我怎么加左连接呢?
但是我用上面那个查询出PC表里几十倍的值,我想是因为2个表间没加左连接,但是2个表就我说的这个被包含的关系,我怎么加左连接呢?
解决方案 »
- oracle 用PL/SQL怎么导入视图
- oracle异构mysql 查询count(*)疑问
- 本机中oracle 配置Toad连接不上DB
- 很奇怪,这个SQL有错么?
- 存储过程的参数就不能传递过去吗?
- 如何按月建立分区表,并且让它自动分区?
- 在oracle中的java sources中写的java程序,在用到sun.net.ftp.ftpClient里的nameList()方法时告诉无些方法,应该怎么做
- 这个语句写错了,麻烦帮改一下?
- 关于dbvisualizer Pro 9使用问题?
- 【求助】Oracle 12c JSON_TABLE功能
- rownum
- forms 开发里面的diaplay item 和editors item各有什么作用
where instr(',' || b.字段 || ',',
',' || a.字段 || ',' ) > 0;
(select 'a123' aa from dual)
,b as
(select 'a123,b456' bb from dual
union all
select 'c789,d123' from dual
union all
select 'a123,dadaf' from dual
)select * from a,b where bb like '%'||aa||'%'--result:a123 a123,b456
a123 a123,dadaf
from cp_om_kpi_info_fy PC left join cp_kpi_info_fy tb_cp
on instr(PC.sourcecode,tb_cp.sourcekpiid) > 0
a表里有270行,我想保留a表所有值。b表符合条件的列出。
3楼的写法是因为你没给数据,你直接把它的select后面改写就完了。
你左边的表和右边的表使用instr判断后不是1对1的关系,而是1对多的关系就会得到700多条,把on后面的条件完善成1对1关系就不会多了。
你这里说PC表里的sourcecode被包含在tb_cp.sourcekpiid里,那就是说tb_cp.sourcekpiid值的范围比PC表里的sourcecode值大喽,比如tb_cp.sourcekpiid = aaaa111,pc.sourcecode = aaa,这样PC表里的sourcecode才算是被包含在tb_cp.sourcekpiid里,不知道楼主我这样理解对吗??
如果是这样的,那楼主你的instr方法就用反了。