informix数据库
语句一:select a.cola from tablea a;
查出的数据是varchar2型:'001,'002','003'
语句二:select * from tableb b where b.col in (语句一的结果);
tableb.col里的值分别有001、002、003、004……,类型为varchar2每次都要先执行第一个语句,再将查出的结果在程序中拼成一个语句再执行才能得到我要的结果,请问哪个高手能一条语句查出来?
语句一:select a.cola from tablea a;
查出的数据是varchar2型:'001,'002','003'
语句二:select * from tableb b where b.col in (语句一的结果);
tableb.col里的值分别有001、002、003、004……,类型为varchar2每次都要先执行第一个语句,再将查出的结果在程序中拼成一个语句再执行才能得到我要的结果,请问哪个高手能一条语句查出来?
解决方案 »
- 存储过程中like 变量的语法
- oracle数据库连接问题
- case..when..then..else..end问题
- ORACLE11g, ORA-04098: 触发器无效且未通过重新验证
- 怎么计算oracle共享内存的使用百分比?
- 高分求教一个概念和用法
- 怎样更快的查询出重复数据?
- oracle 表空间问题??
- 安装了客户端,有SQL*LOADER吗?
- ★★ Ora-12705: Invalid or unknown NLS parameter value specified,是跟语言有关吗? ★★
- 在线等!! ORA-32411 实体化视图定义查询超出了最大长度
- 如果比较两个表的表结构?PLSQL Developer问题
select * from tableb b where b.col in (select a.cola from tablea a)
select wm_concat(b.col) from tableb b where b.col in (select a.cola from tablea a)
--10g版本
select wm_concat(b.col) from tableb b
where exists(select 1 from tablea a where a.cola=b.col)
select * from tableb b where exists(select 1 from tablea a where a.cola=b.col)
用EXISTS方式会比IN的方式查询速度快。IN()如果括号里面的值不超过三个的话还可以。
informix数据库
语句一:select a.cola from tablea a;
查出的数据是varchar2型:'001,'002','003'
语句二:select * from tableb b where b.col in (语句一的结果);
tableb.col里的值分别有001、002、003、004……,类型为varchar2select * from tableb b where b.col in(select cola from tablea)
minitoy的想法还不错,但informix不是oracle,没有instr函数。
大家可能把我的意思理解错了。如果只是用in或exists那就简单了。
我要查的是:
当子查询返回的是一个列,这样写是可以的。但我的子查询返回的是一条数据(也就是'001,'002','003',注意这里是一条记录,一条varchar2类型的记录,把它放在java程序里就是一个String型变量,执行第一语句后返回的结果是:rs.getString("cola")="'001,'002','003'")。前面最后一句我也说了都是要先执行第一个语句,再在程序中拼出一个语句,拼出的语句是select * from tableb b where b.col in ('001,'002','003');程序样子是:
String sql1 = "select first 1 a.cola from tablea a";
执行sql1得到结果集rs1;
String str_tj = rs1.getString("cola");//这里str_tj里存的值是:"'001,'002','003'"
String sql2 = "select * from tableb b where b.col in (" + str_tj + ")";
执行sql2,得到需要的结果集。现在我想把它改成一个语句查出结果。
如果数据返回是一条的话,这条怎么能查出来
'001,'002','003'
这个结果?
难道'001,'002','003'是一条记录?
我现在的做法是第一次将'001,'002','003'查出来,并放到一个String型变量中,然后再利用这个变量在程序中拼出语句2再执行查询。
也就是说现在的要得到我要的结果需要对数据库进行两次查询,我想把它整合成一次就能查出的语句。
在这里先谢谢大家的关注。