喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
 13  1/2  1  2  > 
     
标题: 数据库 问题考试你 就俩表难为你一下. 发散思维, 试想并列问题。  
 
newmewo (newmewo)
注册会员
Rank: 2
初级会员



UID 16785
精华 0
积分 73
帖子 108
金钱 73 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2002-9-30
状态 离线
[广告]: Enom域名自助付费 自助注册 自助PUSH 主流域名COM等一律57.99元年
数据库 问题考试你 就俩表难为你一下. 发散思维, 试想并列问题。

战位,一会写内。
2007-9-19 08:13 PM#1
查看资料  发短消息  顶部
 
newmewo (newmewo)
注册会员
Rank: 2
初级会员



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;
2007-9-19 08:39 PM#2
查看资料  发短消息  顶部
 
newmewo (newmewo)
注册会员
Rank: 2
初级会员



UID 16785
精华 0
积分 73
帖子 108
金钱 73 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2002-9-30
状态 离线
[推荐阅读] PHP中复选框的接收值的问题
以上 文字都 在网吧内完成.由于某测试环境. 所以对自己给出的 SQL  语句没有判断对否.
如果不能正常运行, 还希望大家动我说的是什么意思.

我只是提醒大家, 这个问题没那么简单。






继续进. 所有表都没有索引,别问为什么, t3 表中由于 u 是主键,算是有索引.  如果是mysql数据库. 给出比较好的 select 语句,并说明效率与表的相关性, 分析出 sql语句的操作方式.


要知道 t1 或者 t2 有可能有 5  位数 左右的情况下 情况会很糟糕. 如果表格够大, 情况也很糟糕. 呵呵。

请各位好好琢磨。  当然,如果用其他数据库 , 也可以写出sql.
如果一个语句完成不了. 可以分开写. 哈哈! 欢迎各位讨论


发散思维. 讨论效率 与问题简单化的折中.

[ 本帖最后由 newmewo 于 2007-9-19 08:55 PM 编辑 ]
2007-9-19 08:44 PM#3
查看资料  发短消息  顶部
 
newmewo (newmewo)
注册会员
Rank: 2
初级会员



UID 16785
精华 0
积分 73
帖子 108
金钱 73 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2002-9-30
状态 离线
[推荐阅读] 问一个比较急的问题(mysql 5.0.37)
提示有点问题。 现在更正一下。

特别提醒 :

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;


这个 sql  有问题。 更正成
select distinct t2a.user  from t2 as t2a left join t2 as t2b on t2b.f = 0 and t2a.u = t2b.u  where t2a.f !=0 AND t2b.f IS NULL;
2007-9-22 07:49 PM#4
查看资料  发短消息  顶部
 
83687 (MR.HU)
金牌会员
Rank: 6Rank: 6
小乞丐


UID 80378
精华 0
积分 1016
帖子 470
金钱 1016 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2006-9-21
状态 离线
[推荐阅读] 厉害的都过来看看!
$sql = "select t1.u from t1 where t1.f!=0 and t1.u not in (select t2.u t2 from t2 where t2.f=0)";这个能可以找到没有作弊,也没有旷过课的人。



此广告位招租!!!
2007-9-27 04:35 PM#5
查看资料  发短消息  QQ  顶部
 
83687 (MR.HU)
金牌会员
Rank: 6Rank: 6
小乞丐


UID 80378
精华 0
积分 1016
帖子 470
金钱 1016 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2006-9-21
状态 离线
[推荐阅读] 如何快速读出MYSQL最新加入的30条数据?
没测执行效率。



此广告位招租!!!
2007-9-27 04:35 PM#6
查看资料  发短消息  QQ  顶部
 
83687 (MR.HU)
金牌会员
Rank: 6Rank: 6
小乞丐


UID 80378
精华 0
积分 1016
帖子 470
金钱 1016 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2006-9-21
状态 离线
[推荐阅读] 求简繁转换映射表文件
$sql = "select t3.u from t3 where t3.s = 男 and t3.u in (select t1.u from t1 where t1.f!=0 and t1.u not in (select t2.u t2 from t2 where t2.f=0))";  这个可以解决第3个问题



此广告位招租!!!
2007-9-27 04:38 PM#7
查看资料  发短消息  QQ  顶部
 
zshtom
中级会员
Rank: 3Rank: 3
初级会员



UID 66877
精华 0
积分 249
帖子 308
金钱 249 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-9-23
状态 离线
[推荐阅读] RMB诚心求网站SEO优化高手完善两个WEB站点
楼上 的方法 不走索引的。 不过 还是支持一下 因为偶不会 而且是没仔细看



什么才是优秀的程序员呢?
2007-9-28 12:48 AM#8
查看资料  发短消息  顶部
 
83687 (MR.HU)
金牌会员
Rank: 6Rank: 6
小乞丐


UID 80378
精华 0
积分 1016
帖子 470
金钱 1016 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2006-9-21
状态 离线
[推荐阅读] 招phper,5名
....你怎么不会啊 ?搞搞就会了



此广告位招租!!!
2007-9-28 10:27 AM#9
查看资料  发短消息  QQ  顶部
 
83687 (MR.HU)
金牌会员
Rank: 6Rank: 6
小乞丐


UID 80378
精华 0
积分 1016
帖子 470
金钱 1016 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2006-9-21
状态 离线
[推荐阅读] 给村长一个建议
发现了笔误  $sql = "select t3.u from t3 where t3.s = 男 and t3.u in (select t1.u from t1 where t1.f!=0 and t1.u not in (select t2.u  from t2 where t2.f=0))";  这个可以解决第3个问题  多了个 t2



此广告位招租!!!
2007-9-28 10:28 AM#10
查看资料  发短消息  QQ  顶部
 13  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.023755 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP