我有一个sql语句困扰了几天了。现在请教下哥们:先说一下我做的功能吧,这样对你们理解我数据库查询有所了解功能大概是:我写了一个申请书,需要四组人来回复,一组人可以有几个人或者无,正常一个人只出现在一组里面,第一组的人全部回复了才到下一组的人回复。
当然,这个申请写的时候是草稿,当提交了,回复人才可以回复,这份申请是本人可以看到,有关回复的人可以看到,其它无关人是看不到的。当所有人回复了,就表示这份申请己通过。下面是表结构:主题表 A //这个是用来存申请内容的,其中 id 为步增,number 为申请单流水账号(唯一的),author为本申请的申请人
          //state为本申请的状态,'正在'让回复人回复中。reply_1,reply_2,reply_3等是回复的组别,里面存的是回复的人名。group_index这个为当前申请书回复到第几组,0时为草稿,没人能看到,1为当前为第一组的人回复,后面的人不能回复,4就是三组人全部回复,即申请完毕。
id number Author State Reply_1 Reply_2 Reply_3 Group_index
1 00001 Admin 正在 U1,u2, U4,u5 U6,u7 1
2 00002 Admin 搞掂 U4 U2 U3,u4 4
3 00003 Admin 未得 0
回复表 B // id 为步增。 number 为主题的流水账号。reply_state这个为回复的状态,‘OK‘代表当前己经回复了,空即为当前还没有回复。 reply_user即为该申请单回复的人。reply_group这个为回复人所在申请单的第几组里。Id Number Reply_state Reply_user Reply_group
1 00001            U1                  1
2 00001            U2                   1
3 00001            U4                  2
4 00001            U5                 2
5 00001            U6                 3
6 00001            U7                 3
7 00002 OK            U4                 1
8 00002 OK            U2                 2
9 00002 OK            U3                 3
10 00002 OK            U4                 3
两个表就是这样,我所要的结果是:显示正在等我签的单
即是:在 主题表A 里的回复人员必须有我,也就是 回复表B reply_user="admin" ,且 当前还没有回复 reply_state is null。
但现在还有一个条件,即 表A.Group_index=表B.Reply_group     最后结果number显示不能重复期望的结果为:
u1和u2两个用户能看到 00001 这个数据,其它人不能看到。
因为这个单正在申请,并且是第一组的人只能回复,而 u1,u2就是在这个组别里面。

解决方案 »

  1.   

    这些数据那里找来的??本人sql菜鸟,谢谢
      

  2.   

    光看这个描述太不明白了...
    你是怎么建立数据库的?不是用sql语句吗?id number Author State Reply_1 Reply_2 Reply_3 Group_index 
    1 00001 Admin 正在 U1,u2, U4,u5 U6,u7 1 
    2 00002 Admin 搞掂 U4 U2 U3,u4 4 
    3 00003 Admin 未得 0 看不懂什么数据格式,到底有几组人?3?4?
      

  3.   

    不好意思,复制过来,空格变得不行了id number Author State Reply_1 Reply_2 Reply_3 Group_index 
    1  00001  Admin   正在  U1,u2,   U4,u5   U6,u7       1 
    2  00002  Admin   搞掂  U4        U2     U3,u4       4 
    3  00003  Admin   未得                                   0应该是这样的。
    我用mysql可视工具建立表的。
      

  4.   

    三组,不好意思,三个。写错了。简单的来说就是 从 b表里搜索出 Reply_user='XXX' 且 Reply_state is null 再且 b表的 vnumber=a表的 group_index就这样。
    但我的结果是多了几个出来
      

  5.   

    select Reply_user from B
    join A
    on B.Reply_group=A.Group_index
    WHERE B.Reply_group=你想要的组别
      

  6.   

    真不好意思,虽然很想帮你,但是你的描述和你的数据库实在看不懂,只能给你这么一个SQL了
    期待其他会SQL的解答你
      

  7.   

    表 A
    id    number    reply_1    reply_2    state    group
    1      0001       u1         u2        ing       1
    2      0002       u3         u4        ed        3表 Bid    number     reply_user    reply_state    reply_group
    1      0001         u1                           1
    2      0001         u2                           2
    3      0002         u3            xxxxx          1
    4      0002         u4            yyyyy          2这是两个表
    我要的结果是 表B里的
    0001 number大概意思是:B.number=A.number and B.reply_state is null and B.reply_user="u1" and A.group=B.reply_group我要的就是这样。符合这个条件的只有 0001 这个数据。
      

  8.   

    select *
    from b 
    where reply_user="u1"
    and reply_state is null
    and exists (select 1 from a where number=b.number and group=B.reply_group)
      

  9.   


    这个貌似起作用了,但select 1 from a where number=b.number and group=B.reply_group这个里的 B 里的 reply_group   和 表 A 里的  group 是相等的,不只是 等于 1
    这个又怎样写呢??
    谢谢,有希望了。
      

  10.   

    这个语句根本没有=1 的概念在里面!基于你上述的测试数据?这个SQL语句的结果不对吗?如果不对,请说明一下,否则别人没办法理解你的问题的。表 A
    id  number  reply_1  reply_2  state  group
    1    0001     u1     u2    ing     1
    2    0002     u3     u4    ed    3表 Bid  number   reply_user  reply_state  reply_group
    1    0001     u1               1
    2    0001     u2               2
    3    0002     u3      xxxxx      1
    4    0002     u4      yyyyy      2这是两个表
    我要的结果是 表B里的
    0001 number
      

  11.   

    在我现在这里数据测出来的,正如我所想要的。但对这句sql语句,不是很理解,话高手解释下。
    select *
    from b 
    where reply_user="u1"
    and reply_state is null
    and exists (select 1 from a where number=b.number and group=B.reply_group) //这行不是很好理解select 1 from //这个 1 是有什么用?谢谢
      

  12.   

    select 1 只不过是选择了个常数。 你需要在帮助中看一下 exists 的含义。这儿我就不贴帮助的内容了。
    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
      

  13.   

    嗯,好多谢你。ACMAIN_CHM
    还有
    x7700,虽然 你的答案不是我想要的,但都多谢你热心帮助我。