select * from ST_MENU menu where menu.ID in (3,3,4)这条语句按理说应该三行数据啊,为什么只有两行结果?重复的自动去掉了?

解决方案 »

  1.   

    2个3重复了啊只要满足Id在那个集合中就行了啊假如ID有重复的3或者4,都会被查询出来的
      

  2.   

    select * from ST_MENU menu where menu.ID in (3,4)
    跟这个是一样的
      

  3.   

    in(3,3,4)相当于 id=3 or id=3 or id=4,中间有两个条件是一摸一样的,所以分析时会合并为一个。
    要3行是吧?那你必须得union:
    select * from ST_MENU menu where menu.ID = 3
    union
    select * from ST_MENU menu where menu.ID =3
    union
    select * from ST_MENU menu where menu.ID = 4
      

  4.   


    应该是UNION ALL。UNION也会去掉重复行。
      

  5.   

    那我这条SQL语句怎么该呢?
    select * from ST_MENU menu where menu.ID in (3,3,4)
    括号里的值是子查询 查询出来的
      

  6.   

    不明白你的需求。ID in (3,3,4)
    看你的数据,ID=3的有几条?
    如果你ID=3的有多条,而该语句只返回一条,那说明有问题。
    如果你只有一条,你让ORACLE给你伪造一条?
    个么使用UNION ALL
      

  7.   

    哦 还有个问题
    select * from ST_MENU menu where menu.ID in (3,3,4)在sql*plus里可以查询出结果
    为什么同样一条语句我在程序里面就查询不出来了呢
    Java代码:
    Statement stmt =  getSession().connection().createStatement();
    ResultSet rs = stmt.executeQuery("select * from ST_MENU");
    if(rs != null)
    while(rs.next()){
    System.out.println(rs.getLong(0));
    }
    rs.next()返回false
    这个是什么问题啊
      

  8.   

    SQL> select * from 帅哥;    帅哥ID 帅哥姓名                         帅哥性别   帅哥年龄
    ---------- -------------------------------- -------- ----------
    帅哥描述
    ----------------------------------------------------------------
             3 zjwilove4                        男               18
    标准帅哥         4 crazylaa                         纯爷们           17
    贼帅!!!
    SQL> select * from 帅哥 where 帅哥ID in (3,3,4);    帅哥ID 帅哥姓名                         帅哥性别   帅哥年龄
    ---------- -------------------------------- -------- ----------
    帅哥描述
    ----------------------------------------------------------------
             3 zjwilove4                        男               18
    标准帅哥         4 crazylaa                         纯爷们           17
    贼帅!!!
    SQL> SELECT * from 帅哥 WHERE 帅哥ID=3
      2  UNION ALL
      3  SELECT * from 帅哥 WHERE 帅哥ID=3
      4  UNION ALL
      5  SELECT * from 帅哥 WHERE 帅哥ID=4;    帅哥ID 帅哥姓名                         帅哥性别   帅哥年龄
    ---------- -------------------------------- -------- ----------
    帅哥描述
    ----------------------------------------------------------------
             3 zjwilove4                        男               18
    标准帅哥         3 zjwilove4                        男               18
    标准帅哥         4 crazylaa                         纯爷们           17
    贼帅!!!
    SQL>
      

  9.   

     不懂JAVA,请crazylaa帅哥回答。
      

  10.   

    这个应该跟程序没关系吧?是不是你sqlplus没有commit?没有commit的情况下,程序连接是另外一个会话,查不出来的。
    能执行到rs!=null且没有抛异常,说明你的连接取到了,表也存在,只不过是没有数据,那么我只能说是你sqlplus数据没有提交。