用户表 u_user表 
    USERID用户ID(PK)  
     EMAIL用户EMAIL(唯一的)
好友关系表u_friend表 
    userid用户ID(关联用户表PK) 
    fuserid好友ID传入参数 (userid当前用户ID,别人的EMAIL)ORACLE 求结果:
如果 别人的EMAIL 不在 u_user表 中,返回0
如果 当前用户ID 和 持有该EMAIL的用户ID 在 好友关系表 不存在记录 返回1
如果 当前用户ID 和 持有该EMAIL的用户ID 在 好友关系表 存在记录 返回2求SQL

解决方案 »

  1.   

    必须用存储过程,一条SQL语句无法得到你要的结果
      

  2.   

    CREATE PROCUDURE PRO_UPDATE (p_userid in number,p_EMAIL in varchar2)
    RETURN NUMBER
    AS  
    V_RES NUMBER;
    v_cnt number;
    v_fid number;
    BEGIN
    --如果 别人的EMAIL 不在 u_user表 中,返回0
    select count(*) 
    into v_cnt
    from u_user u
    where u.EMAIL=p_EMAIL;
    if v_cnt=0 then
       v_res=0;
       return v_res;
    else
       --先取得持有该EMAIL的用户ID
       select USERID 
        into v_fid
        from u_user u
        where u.EMAIL=p_EMAIL;
    end if;
    --如果 当前用户ID 和 持有该EMAIL的用户ID 在 好友关系表 不存在记录 返回1
    --如果 当前用户ID 和 持有该EMAIL的用户ID 在 好友关系表 存在记录 返回2
       v_cnt:=0;--置0
       select count(*)
        into v_cnt
        from u_friend uf
        where uf.userid=p_userid 
        and uf.fuserid=v_fid;
        
        if v_cnt=0 then
            v_res=1;
            return v_res;
       else
            v_res=2;
            return v_res;
       end if;--更新失败时返回-1
    EXCEPTION 
    WHEN OTHERS THEN
    V_RES=-1;RETURN V_RES;
    END;
      

  3.   

    这个可以create or replace function pp(p_id number, p_em varchar2) return number is
      v_res  number;
      v_cnt1 number;
      v_cnt2 number;
    begin
      select count(1) into v_cnt1 from u_user where email = p_em;
      select count(1)
        into v_cnt2
        from u_friend
       where (userid = p_id and
             fuserid = (select userid from u_user where email = p_em))
          or (userid = (select userid from u_user where email = p_em) and
             fuserid = p_id);
      if v_cnt1 = 0 then
        v_res := 0;
      else
        if v_cnt2 = 0 then
          v_res := 2;
        else
          v_res := 1;
        end if;
      end if;
      return v_res;
    end pp;