这个SQL查询语句要怎么写

AB姓名科目姓名科目成绩a1a1合格a2b1未知b2c1不合格如上,A表和B表,现在要查询出A表中不是合格的人员... A B
姓名 科目 姓名 科目 成绩
a 1 a 1 合格
a 2 b 1 未知
b 2 c 1 不合格

如上,A表和B表,现在要查询出A表中不是合格的人员
展开
 我来答
hydonlee
2012-01-14 · TA获得超过590个赞
知道小有建树答主
回答量:859
采纳率:0%
帮助的人:435万
展开全部
没有一个对的。

1.select A.姓名,A.科目 from A as A inner join B as B on A.姓名=B.姓名 where B.成绩<>‘合格’
错误,问题在于,如果A中存在姓名与科目,而条件中只有姓名,如果存在多科目就会出错。

2.select 姓名,科目
from A
where 姓名 in (select 姓名 from B where 成绩<>‘合格’);
错误,因为条件只有姓名,所以如果一个人在B中有一科成绩不合格就会把所有科目列出来。

3.select a.姓名,a.科目,b.成绩
from a,b
where a.姓名=b.姓名 and a.科目=b.科目 and b.成绩<>'合格'
错误,这个是1的升级版,修改了姓名、科目的对应问题。但忽略了可能存在A中的姓名、科目不存在B中的情况(如缺考情况下,B表中可能没有数据)。这一SQL不会显示,此时可能是人员缺考,所以人员需要列出。而且题意是要列出A表中不是合格的人员,更合适的理解是列出A表,并不需要列出成绩。

4.select A.姓名 from A,B where A.姓名=B.姓名 and A.科目=B.科目 and B.成绩<>'合格'
错误同上。而且少了科目。

----------------
我的答案:
select A.姓名, A.科目
from A
left join B on A.姓名=B.姓名 and A.科目 = B.科目
where B.成绩 = '不合格' or B.成绩 is null

如果,真的只要姓名,虽然我认为这样信息量太少,实际问题也不合理,则可以
select distinct A.姓名
from A
left join B on A.姓名=B.姓名 and A.科目 = B.科目
where B.成绩 = '不合格' or B.成绩 is null
更多追问追答
追问
我想先查询出B中合格人员,然后用A表对比,只要不在B表合格中的人员都列出来。
用not in 的话好像只能指定一个条件, 用 not exists不知为何查询不出数据, 是我写错了,还是不能这样用?
select A.姓名,A.科目 from A where not exists (select 姓名,科目 from B where 成绩='合格')
追答
exists 只返回true/false. 并不象in一样可以返回一什结果集。
时空遥控器
2012-01-14 · TA获得超过4852个赞
知道小有建树答主
回答量:2807
采纳率:37%
帮助的人:818万
展开全部
select A.姓名 from A,B where A.姓名=B.姓名 and A.科目=B.科目 and B.成绩<>'合格'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HONGUANG
2012-01-13
知道答主
回答量:34
采纳率:0%
帮助的人:19.1万
展开全部
可以用join,也可以用subquery
给个subquery的例子,看起来清楚点,不会产生attri的混淆
select 姓名,科目
from A
where 姓名 in (select 姓名 from B where 成绩<>‘合格’);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
althiy
2012-01-13 · TA获得超过293个赞
知道小有建树答主
回答量:533
采纳率:100%
帮助的人:377万
展开全部
select A.姓名,A.科目 from A as A inner join B as B on A.姓名=B.姓名 where B.成绩<>‘合格’
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
心甘情愿2x
2012-01-14
知道答主
回答量:22
采纳率:0%
帮助的人:15.8万
展开全部
select a.姓名,a.科目,b.成绩
from a,b
where a.姓名=b.姓名 and a.科目=b.科目 and b.成绩<>'合格'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友afbade5
2012-01-14 · 超过10用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:36.2万
展开全部
很多写法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式