我有一个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就是在这个组别里面。
当然,这个申请写的时候是草稿,当提交了,回复人才可以回复,这份申请是本人可以看到,有关回复的人可以看到,其它无关人是看不到的。当所有人回复了,就表示这份申请己通过。下面是表结构:主题表 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就是在这个组别里面。
你是怎么建立数据库的?不是用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?
1 00001 Admin 正在 U1,u2, U4,u5 U6,u7 1
2 00002 Admin 搞掂 U4 U2 U3,u4 4
3 00003 Admin 未得 0应该是这样的。
我用mysql可视工具建立表的。
但我的结果是多了几个出来
join A
on B.Reply_group=A.Group_index
WHERE B.Reply_group=你想要的组别
期待其他会SQL的解答你
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 这个数据。
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 a where number=b.number and group=B.reply_group这个里的 B 里的 reply_group 和 表 A 里的 group 是相等的,不只是 等于 1
这个又怎样写呢??
谢谢,有希望了。
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
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 是有什么用?谢谢
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
还有
x7700,虽然 你的答案不是我想要的,但都多谢你热心帮助我。