人员课程表 table1name course
a 语文
a 数学
a 化学
b 语文
b 英语
b 数据库
c 语文
c 数学
c 英语
c 物理
c 化学
c 数据库
课程表 course
id course
1 语文
2 数学
3 英语
4 物理
5 化学
6 数据库求选择了全部课程的人
结果name course
c 语文
c 数学
c 英语
c 物理
c 化学
c 数据库
a 语文
a 数学
a 化学
b 语文
b 英语
b 数据库
c 语文
c 数学
c 英语
c 物理
c 化学
c 数据库
课程表 course
id course
1 语文
2 数学
3 英语
4 物理
5 化学
6 数据库求选择了全部课程的人
结果name course
c 语文
c 数学
c 英语
c 物理
c 化学
c 数据库
select name from table1 group by name having(count(*)=6))
FROM TABLE1
WHERE NAME IN
(
SELECT NAME
FROM TABLE1
GROUP BY NAME
HAVING COUNT(1) = (SELECT COUNT(1) FROM course))
SELECT * FROM table1 t WHERE (SELECT COUNT(*)FROM table1 WHERE NAME=t.NAME AND COURSE IN( select course from course))=6
FROM TABLE1
WHERE NAME IN
(
SELECT NAME
FROM TABLE1
GROUP BY NAME
HAVING COUNT(1) = (SELECT COUNT(1) FROM course))
from student a
join course b on a.course=b.course
group by a.name
having count(1)=(select count(*) from course)
INSERT @table1 SELECT 'a' ,N'语文'
INSERT @table1 SELECT 'a' ,N'数学'
INSERT @table1 SELECT 'a' ,N'化学'
INSERT @table1 SELECT 'b' ,N'语文'
INSERT @table1 SELECT 'b' ,N'英语'
INSERT @table1 SELECT 'b' ,N'数据库'
INSERT @table1 SELECT 'c' , N'语文'
INSERT @table1 SELECT 'c' , N'数学'
INSERT @table1 SELECT 'c' , N'英语'
INSERT @table1 SELECT 'c', N'物理'
INSERT @table1 SELECT 'c', N'化学'
INSERT @table1 SELECT 'c', N'数据库'
DECLARE @course TABLE(id INT,course NVARCHAR(10))
INSERT @course SELECT 1 ,N'语文'
INSERT @course SELECT 2 ,N'数学'
INSERT @course SELECT 3 , N'英语'
INSERT @course SELECT 4 , N'物理'
INSERT @course SELECT 5 , N'化学'
INSERT @course SELECT 6, N'数据库'
SELECT A.NAME FROM (
SELECT COUNT(*)CNT,[NAME] FROM @table1 GROUP BY [NAME])A
,(SELECT COUNT(*)CNT FROM @course)B WHERE A.CNT=B.CNT/*NAME
----------
c
*/
declare @student table([name] varchar(10),course varchar(10))
insert @student
select 'a','语文' union all
select 'a','数学' union all
select 'a','化学' union all
select 'b','语文' union all
select 'b','英语' union all
select 'b','数据库' union all
select 'c','语文' union all
select 'c','数学' union all
select 'c','英语' union all
select 'c','物理' union all
select 'c','化学' union all
select 'c','数据库' declare @course table(id int,course varchar(10))
insert @course
select 1,'语文' union all
select 2,'数学' union all
select 3,'英语' union all
select 4,'物理' union all
select 5,'化学' union all
select 6,'数据库'select a.* from @student a
inner join
(
select b.name from
(select name,count(course) num from @student group by name) b
inner join
(select max(id) id from @course) c on b.num=c.id) d
on a.name=d.name
select name,course from @table1 where name in
(
select name from @table1 group by name having(count(name)=6)
)
应该像3楼一样,简单明了。
DECLARE @table1 TABLE(name VARCHAR(10), course NVARCHAR(10))
INSERT @table1 SELECT 'a' ,'语文'
INSERT @table1 SELECT 'a' ,'数学'
INSERT @table1 SELECT 'a' ,'化学'
INSERT @table1 SELECT 'b' ,'语文'
INSERT @table1 SELECT 'b' ,'英语'
INSERT @table1 SELECT 'b' ,'数据库'
INSERT @table1 SELECT 'c' , '语文'
INSERT @table1 SELECT 'c' , '数学'
INSERT @table1 SELECT 'c' , '英语'
INSERT @table1 SELECT 'c', '物理'
INSERT @table1 SELECT 'c', '化学'
INSERT @table1 SELECT 'c', '数据库' DECLARE @course TABLE(id INT,course NVARCHAR(10))
INSERT @course SELECT 1,'语文'
INSERT @course SELECT 2,'数学'
INSERT @course SELECT 3,'英语'
INSERT @course SELECT 4,'物理'
INSERT @course SELECT 5,'化学'
INSERT @course SELECT 6,'数据库' SELECT * FROM @table1
WHERE name IN (SELECT name FROM @table1
GROUP BY name
HAVING(count(*))=(SELECT count(*) FROM @course))