2010-04-27 108 views
4

我试图做一个查询,查看一张表,看看一个学生是否在一个叫做CMHT的团队和医疗队 - 如果他们是我不想看到结果。查询帮助

我只希望看到记录,如果他们只在CMHT或军医,而不是两个。

正确的方向是使用子查询过滤出来吗?我已经搜索了不在,但你怎么能看看它是否在2个以上的球队不是?

Student  Team   ref 
1   CMHT   1 
1   Medic   2 
2   Medic   3 this would be in the result 
3   CMHT   5 this would be in the result 

到目前为止,我已经做了下面的代码,我需要使用子查询或做一个自我加入和过滤它的方式吗?

SELECT Table1.Student, Table1.Team, Table1.refnumber 
    FROM Table1 
WHERE (((Table1.Team) In ('Medics','CMHT')) 

+0

还有其他r团队?如果他们既不在'Medic'也不在'CMHT'中,您是否想要返回学生? – Quassnoi 2010-04-27 17:19:00

回答

2

这是马克·拜尔斯的用HAVING子句而不是子查询回答:

SELECT Student, Team, ref 
FROM Table1 
GROUP BY Student 
HAVING COUNT(Student) = 1 
+0

嘿 谢谢:) dint认为做一个计数.. :) – user319160 2010-04-27 18:22:38

+0

o ps谢谢大家的帮助:) - 在另一个主题上如何外连接工作? – user319160 2010-04-27 18:23:15

+0

@ hdoe123:另一个主题=另一个问题。 – 2010-04-27 18:39:12

1
SELECT * 
FROM students 
WHERE NOT EXISTS 
     (
     SELECT NULL 
     FROM students si 
     WHERE si.student = s.student 
       AND si.team = 'CMHT' 
     ) 
     OR NOT EXISTS 
     (
     SELECT NULL 
     FROM students si 
     WHERE si.student = s.student 
       AND si.team = 'Medic' 
     ) 
1
SELECT a.* 
FROM Table1 a 
INNER JOIN 
(SELECT Student, COUNT(*) FROM Table1 
GROUP BY Student 
HAVING COUNT(*) = 1)b 
ON (a.Student = b.Student) 
1

如何,你可以在这里看到检查其在2个人以上的团队?

你可以指望每个学生团队的数量,然后筛选只有那些你希望看到:

SELECT student FROM 
(
    SELECT student, COUNT(*) AS cnt 
    FROM Table1 
    GROUP BY student 
) T1 
WHERE cnt = 1 
1

你可以用外做加盟

select COALESCE(t1.Student, t2.Student) as Student, 
     COALESCE(t1.Team, t2.Team) as Team, 
     COALESCE(t1.ref, t2.ref) as ref 
from 
    (select * from Student where Team = 'CMHT') t1 
    outer join 
    (select * from Student where Team = 'Medic') t2 
    on t1.Student = t2.Student 
where 
    t1.Student is null or 
    t2.Student is null; 
+0

'MySQL'不支持'FULL OUTER JOIN'。 – Quassnoi 2010-04-27 17:41:25

+0

对不起,不知道。看到这个问题也被标记为tsql,并认为SqlServer语法和外连接行为是有效的。 – Fede 2010-04-27 18:51:44