当前位置: 代码迷 >> Sql Server >> 连回3贴都是错的(不能继续发回复了),只能在这儿重开一贴把小弟我觉得正确的补上
  详细解决方案

连回3贴都是错的(不能继续发回复了),只能在这儿重开一贴把小弟我觉得正确的补上

热度:36   发布时间:2016-04-27 13:57:56.0
连回3贴都是错的(不能继续发回复了),只能在这儿重开一贴把我觉得正确的补上
原贴内容:

目前碰到一个查询不会写,表结构是这样的

表A Id Name
1 李三
2 小明
3 林明
表B Id 表AID content grade
1 1 钢琴 二级
2 1 英语 一级
3 2 骑马 一级
4 3 英语 三级
5 3 数学 三级
6 3 钢琴 五级
7 1 骑马 一级

想查询出同时拥有 钢琴二级和英语一级的同学姓名,查询语句如何写呢?


查询结果

Name content grade
李三 钢琴 二级
李三 英语 一级


补充回复:

见一楼

------解决方案--------------------
这句有什么问题?
SQL code
if(OBJECT_ID('a') is not null) drop table aGOcreate table a (Id int, name varchar(10))insert into a values(1, '李三')insert into a values(2, '小明')insert into a values(3, '林明')if(OBJECT_ID('[b]') is not null) drop table bGOcreate table b (Id int,AID int,content varchar(10), grade varchar(10))insert into b values(1 ,1 ,'钢琴', '二级')insert into b values(2 ,1 ,'英语', '一级')insert into b values(3 ,2 ,'骑马', '一级')insert into b values(4 ,3 ,'英语', '三级')insert into b values(5 ,3 ,'数学', '三级')insert into b values(6 ,3 ,'钢琴', '五级')insert into b values(7 ,1 ,'骑马', '一级')insert into b values(8,2,'英语', '一级')insert into b values(9,2,'钢琴', '二级')goselect t1.name,t2.content,t2.gradefrom a t1 join b t2 on t1.id=t2.aidwhere exists(select 1 from b where content='钢琴' and grade='二级' and aid=t2.aid)and exists(select 1 from b where content='英语' and grade='一级' and aid=t2.aid)and t2.content in ('钢琴','英语')go/*name       content    grade      ---------- ---------- ---------- 李三         钢琴         二级李三         英语         一级小明         英语         一级小明         钢琴         二级(所影响的行数为 4 行)*/
------解决方案--------------------
每次都得等着Google的广告load完成。
------解决方案--------------------

------解决方案--------------------
探讨
想查询出同时拥有 钢琴二级和英语一级的同学姓名,查询语句如何写呢?……

查询结果

Name content grade
李三 钢琴 二级
李三 英语 一级

------解决方案--------------------
帮顶。
  相关解决方案