有一个数组,user1,user2,user9
有一个用户表,里面有很多用户,比如user1,user2,user3,user4等等。
我现在要查询这个数组中的所有用户如果在用户表中只要有一个不存在那么返回0,如果数组中所有的用户在用户表中都存在那么返回1,这条SQL语句怎么写呢?

解决方案 »

  1.   

    哈哈,这种问题要翻过来考虑就容易解决了,因为你这种问题是不可能直接解决的,至少目前数据库还没有达到这个水平。
    我给你一个解决方案,你看看能不能满足一下你的需求比如你的书组 string []a = {"123","1234","12345"};
    string str = "";
    for(i=0; i<a.length; i++)
    {
    str += "'" + a[i] + "',";
    }
    str = str.substring(0, str.length-1);
    strsql = "select * from table1 where id in (" + str + ")";
    strsql = "select count(*) from (" + strsql + ")"然后执行这个语句,如果得到的值 等于a数组的长度,那么就表示都存在,如果小于数组a的长度,那么就,当然,条件是数组中元素不重复,表中id也是unique的
      

  2.   

    当然了,如果是java或者.net你也可以通过传递sql参数,不用for循环中的字符串联接,而全部替换成参数更为准确一点,关键嘛!还是要靠自己才可以。思路已经给你了
      

  3.   

    如果是拼sql,就可以类似下面的语句
    不足的是,当数组很大时,效率会下降很多
    select decode(col, 3, 1, 0) e
      from (select nvl((select 1 from t_user where username = 'user1'), 0) +
                   nvl((select 1 from t_user where username = 'user2'), 0) +
                   nvl((select 1 from t_user where username = 'user9'), 0) col
              from dual)
      

  4.   

    楼上的sql有问题吧?
    都存在才返回1,你写的是存在记录的条数,明显跟题意不符。
      

  5.   

    awenhao的对于输入有重复的用户是实现不了的。
    manyroads的写得很不错,不过正如你所说的那样,如果数据量很大的话,效率确实会下降。
      

  6.   

    k-a-o,输入有重复你完全应该在程序里边去掉啊,数据库的宗旨就是要排除冗余,你自己先再程序里去掉重复是你的基本的责任,难道你还想一切任务交给数据库去做啊,做程序要懂得自己的责任
      

  7.   

    当然实现不了,我害曾经想过用一句话sql实现共产主义,结果发现连procedures都不能帮我实现,于是我这个问题已经提出2年了,至今没有得到解决,请问有人能帮我解决吗?一句sql实现共产主义。
      

  8.   

    也可以实现的,只不过sql会比较长
      

  9.   

    不用union这么傻的东西一样可以实现,不过我实在不想说了。
      

  10.   

    建一个临时表temp_table,每次都删除完毕,再作比较的时候批量将数组里的数据插入
    那个用户的表假设叫user_table
    select count(*)
    from (
          select user_name
          from temp_table
          minus
          select user_name
          from user_table
    )
    如果count(*)的数目=0,表示数组里的数据在user_table中都存在,如果>0,表示数组里的表在user_table中不是都存在