举个例子,我有两个sql 语句, select name,id,time from zdhqw, select count(1) from news where type='id';第二条语句的type的值是第一条语句查出来的id,要求返回这个返回这两条语句的值

解决方案 »

  1.   


    select t1.name,t1.id,count(t2.type)
      from news t1 right join zbhqw t2 on t1.type = t2.id
     group by t1.name,t1.id;
      

  2.   

     这样貌似不行啊,其实我想要的是一个存储过程, 有两个表 t_zbys, 表zdnews,
    t_zbys 只要查出来,name,id,parentid,time 就行了,这个表是一个树形菜单表 每个树形菜单有 父菜单,parentid就是父菜单的id。zdnews表中根据树形菜单中 id存放 菜单中下面所有信息,我只是简单的介绍下,这些都不是重点,我只想让这两条语句和在一起查询然后 返回数据. select id,name,parentid,time from t_zbys
      
    SELECT COUNT(id) NUM FROM ZDNEWS WHERE TYPE IN (SELECT ID FROM T_ZBYS D WHERE D.ID = '"+id+"' OR D.PARENTID = '"+id+"' OR D.PARENTID IN (SELECT ID FROM T_ZBYS T WHERE T.PARENTID ='"+id+"')OR PARENTID IN ( SELECT ID FROM T_ZBYS WHERE PARENTID IN (SELECT ID FROM T_ZBYS WHERE PARENTID IN ("+id+"))))第一条语句中的id 是第二条语句中的条件,并且返回这两条语句的值。第二条语句 是查询树形菜单下的记录数,没有办法 我只会这么写了。谁能把这两条语句写在一起,存储过程也行。要返回两条语句的值
      

  3.   

    SELECT COUNT(id) NUM FROM ZDNEWS WHERE TYPE IN (SELECT ID FROM T_ZBYS D WHERE D.ID = 'id' OR D.PARENTID = 'id' OR D.PARENTID IN (SELECT ID FROM T_ZBYS T WHERE T.PARENTID ='"+id+"')OR PARENTID IN ( SELECT ID FROM T_ZBYS WHERE PARENTID IN (SELECT ID FROM T_ZBYS WHERE PARENTID IN (ID))))
      

  4.   


    select count(1), zdhqw.id, zdhqw.time
      from news
      left outer join zdhqw
        on zdhqw.id = news.type
     where zdhqw.id is not null
      

  5.   


    不好意思,少了个group by.zdhqw.id, zdhqw.time
      

  6.   

    感谢你回复我的帖子你能 把这两个语句写在一起吗 或者 是一个存储过程,select id,name,parentid,time from t_zbys
    SELECT COUNT(id) NUM FROM ZDNEWS WHERE TYPE IN (SELECT ID FROM T_ZBYS D WHERE D.ID = '"+id+"' OR D.PARENTID = '"+id+"' OR D.PARENTID IN (SELECT ID FROM T_ZBYS T WHERE T.PARENTID ='"+id+"')OR PARENTID IN ( SELECT ID FROM T_ZBYS WHERE PARENTID IN (SELECT ID FROM T_ZBYS WHERE PARENTID IN ("+id+"))))
      

  7.   

    两条语句的查询字段都不同,怎么一块返回数据,自己不会写不要紧,关键是需求你得描述清楚,或者你把表结果发出来,想要的结果用excel画出来,让大家也好清楚你想要什么。
      

  8.   

    lz的意思貌似是要针对 每一个id,把他的子节点的数量求和。
    这个应该不难,下班了,明天没人解决再写个sql。。
      

  9.   

     select name,id,time , (select count(1) from news where type=a.id) cnt from zdhqw a这样不行吗
      

  10.   

    我在重新完整的说一遍吧,我有个树形菜单,是动态的 ,树形菜单有四级到五级 只有最后一级菜单下添加信息。select name,time,parentid,time from t_zbys 这条语句是查询菜单表,放到一个list当中去,在jsp页面中进行循环拿出记录通过js 自动排列。本来这样也就实现了ok,但是又要求如果菜单下有记录的话就统计出有多少条记录,我就这样写了把上面的语句给改成了
    select s.*,y.scount from  t_zbys s ,(select t.type ,count(*) as scount from zdnews t group by t.type) y where s.id=y.type(+) order by s.id desc
    这样也ok了但是客户又有要求了, 比如说 我有个根菜单,有两个二级菜单,两个二级下有好多信息,可以分别计数,放在标题的后面 一起查询出来,但是要求一级 菜单 后面也要有计数,是下面几级菜单里面记录数的总和,那么上面的语句就不行了,我就分别查询,先查询菜单进行排列 然后再排列的时候执行方法去查询记录数,SELECT COUNT(id) NUM FROM ZDNEWS WHERE TYPE IN (SELECT ID FROM T_ZBYS D WHERE D.ID = '"+id+"' OR D.PARENTID = '"+id+"' OR D.PARENTID IN (SELECT ID FROM T_ZBYS T WHERE T.PARENTID ='"+id+"')OR PARENTID IN ( SELECT ID FROM T_ZBYS WHERE PARENTID IN (SELECT ID FROM T_ZBYS WHERE PARENTID IN ("+id+"))))
    这样也可以实现 ,但是由于是在 菜单循环列出的时候 又执行另一个方法进行计数的所以 循环在嵌套方法 导致效率很慢(不是sql的问题,就是由于循环列出的过程中进行执行方法导致效率低下)所以 我希望在循环列出菜单的时候 同时查出记录数。就是结合那两条语句,语句的话我感觉不太好实现 存储过程应该可以的但是我不太会。就是select name,time,parentid,time from t_zbys查询出得到的id赋给SELECT COUNT(id) NUM FROM ZDNEWS WHERE TYPE IN (SELECT ID FROM T_ZBYS D WHERE D.ID = '"+id+"' OR D.PARENTID = '"+id+"' OR D.PARENTID IN (SELECT ID FROM T_ZBYS T WHERE T.PARENTID ='"+id+"')OR PARENTID IN ( SELECT ID FROM T_ZBYS WHERE PARENTID IN (SELECT ID FROM T_ZBYS WHERE PARENTID IN ("+id+"))))
    然后再返回 name,parentid,time,NUM。不知这样有没有实现的可能性
      

  11.   


    --看来我猜对了楼主的需求了
    WITH T1 AS(
      SELECT CONNECT_BY_ROOT ID AS ID,NAME,PARENTID,TIME
        FROM t_zbys LEFT JOIN ZDNEWS ON ID = TYPE 
       CONNECT BY PRIOR ID = PARENTID
    ),T2 AS(
      SELECT ID,COUNT(TYPE) NUM
        FROM T1
       GROUP BY ID
    )SELECT A.ID,A.PARENTID,A.TIME,T2.NUM
       FROM t_zbys A INNER JOIN T2 ON A.ID = T2.ID;
      

  12.   

    定义一个临时表和游标
    create table tmp_zbys(id varchar2(100),num number);
    CREATE OR REPLACE PACKAGE PKG_CONST AS
      TYPE ZRAR_CURSOR IS REF CURSOR;
    END  PKG_CONST;
    存储过程create or replace procedure pro_xxxx(v_cur out PKG_CONST.ZRAR_CURSOR)
    is
      vid varchar2(100); --id
      num number;--数量
      cursor zbys_cursor is
        select type,count(1) num from news group by type;--获取类型
    begin
      delete tmp_zbys;
      open zbys_cursor;
      loop
        fetch zbys_cursor into vid,num;
        exit when zbys_cursor%notfound;
        insert into tmp_zbys
        select id,num from zdhqw
        start with id=vid
        connect by prior parentid=id;
      end loop;
      close zbys_cursor;
      open v_cur for
      select t.name,t.id,t.time,nvl(c.num,0),num from zdhqw t,
      (select id,sum(num) num from tmp_zbys group by id) c
      where t.id=c.id(+);
    commit;
    end xxxx;