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每次都要先执行第一个语句,再将查出的结果在程序中拼成一个语句再执行才能得到我要的结果,请问哪个高手能一条语句查出来?

解决方案 »

  1.   

    ----就这样就就可以了
    select * from tableb b where b.col in (select a.cola from tablea a)
      

  2.   

    还是直接这样呢
    select wm_concat(b.col) from tableb b where b.col in (select a.cola from tablea a)
      

  3.   


    --10g版本
    select wm_concat(b.col) from tableb b 
    where exists(select 1 from tablea a where a.cola=b.col)
      

  4.   


    select * from tableb b where exists(select 1 from tablea a where a.cola=b.col)
      

  5.   

    select * from tableb b where exists(select 1 from tablea a where a.cola=b.col)
    用EXISTS方式会比IN的方式查询速度快。IN()如果括号里面的值不超过三个的话还可以。
      

  6.   


    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)
      

  7.   

    谢谢各位的关注,但大家的结果都不对。
    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,得到需要的结果集。现在我想把它改成一个语句查出结果。
      

  8.   

    select a.cola from tablea a;
    如果数据返回是一条的话,这条怎么能查出来
    '001,'002','003'
    这个结果?
    难道'001,'002','003'是一条记录?
      

  9.   

    那就用动态SQL吧,直接把语句一查出的varchar2型数据作为条件查询
      

  10.   

    select * from tableb b where b.col in(select a.cola from tablea a)
      

  11.   


    我现在的做法是第一次将'001,'002','003'查出来,并放到一个String型变量中,然后再利用这个变量在程序中拼出语句2再执行查询。
    也就是说现在的要得到我要的结果需要对数据库进行两次查询,我想把它整合成一次就能查出的语句。
    在这里先谢谢大家的关注。
      

  12.   

    在oracle中可能用instr函数实现,sql server中可以用charindex函数实现。我就是不知道informix自带的此种函数?