newmewo
(newmewo)
注册会员

初级会员
UID 16785
精华
0
积分 73
帖子 108
金钱 73 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2002-9-30
状态 离线
|
[广告]: 代充Paypal帐号美元
不能再编辑了. 跟帖, 问题或者条件不清楚的, 继续问。
废话篇:不想有意思的,或者先针对问题的,请跳过本节.
是这样的, 为了给你点难度. 偶用例子来说明问题,并且还要接近现实,希望你不觉得很枯燥. 现实问题更有意思点。
正题: 请认真看题目,因为很重要. :)
假设偶现在有个数据库. 用来记录学生情况的, 下面我针对的来说明所包含的表 然后会提出问题. 请各位注意: 简单期间, 每个学生是一个用户.
所有表中没有 IS NULL 声明, 所有数据都不可能是 NULL
表1,t1 学习状况表. 包含数据项: u: 用户名,记录用户名. f: 记录标志,其中 f 是 0 表示用户有一次旷课记录.
表2, t2 考试状况表. 包含数据项: u:用户名,记录用户名字. f:记录标志, 其中 f 为 0 表示用户有一次考试作弊记录.
表3, t3 用户表. 包含数据项: u:用户名, 同上. 不过这表是唯一标志. 主键. s: 用户性别. 可选择 ('男','女','未知');
(不是说俩表,怎么有三表呢? 呵呵,你可以不用第三个表的. 用来方便 更多人提出更多问题,哈哈)
问题:
主要问题. 这次我想统计下用户,也就是同学的情况, 有违规记录的同学我还想搞点活动. 不过参加的 用户 不能是有逃课记录或者作弊记录 . 也就是是说. 我想在 t1 和 t2 中 存在的用户, 条件是, 这些用户 不的有 逃课记录或者考试作弊, 也就是 无论 t1 或者 t2 表, 结果得到的用户都不应该有 f=0 的对应项目.
如果你知道怎么做, 请尝试找出 上面这个结果中的 男性用户, 也就是 t3 表中 s = '男' 的数据.
特别提醒 :
1 . t1 和 t2 中 用户名 u 不是唯一的 可能一个同学有一个或者一个以上的 违规记录. 也可能根本就这个同学的记录.
但一旦这个用户 u 的标志 f中有 0 的数据项存在, 那么这个同学就不应该是我们想要的结果.
只要有严重违规, 就不是我们要的结果. f=0 就是严重违规的判断条件. 并且出现在任何一个表中都被抛弃.
2. t1 和 t2 表中 用户名u 不一定是包含全部的用户, 也就是说. t1 或者 t2 可能是空表. 但为了数据查询正常进行, 设 t1 和t2 数据项目 都大于 1 条数据,也就是说。我们的表没有空表. 
3. 提示 下面这个条件可以找出 考试有过错, 但没有作弊的同学名单.
select DISTINCT t2a.user from t2 as t2a left join t2 as t2b on t2b.f = 0 where t2a.f !=0 AND t2b.f IS NULL;
|
|