Помогите с запросом - PullRequest
       16

Помогите с запросом

4 голосов
/ 27 апреля 2010

Я пытаюсь составить запрос, который просматривает одну таблицу, чтобы узнать, входит ли студент в команду CMHT и в команду медика - если это так, я не хочу видеть результат.

Я хочу видеть записи, только если они только в CMHT или медик, а не в обоих.

Будет ли правильное направление использовать подзапрос для его фильтрации?Я выполнил поиск по NOT IN, но как вы могли проверить, если в более чем 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')) 

Ответы [ 5 ]

2 голосов
/ 27 апреля 2010

Это ответ Марка Байерса с предложением HAVING вместо подзапроса:

SELECT Student, Team, ref
FROM Table1
GROUP BY Student
HAVING COUNT(Student) = 1
1 голос
/ 27 апреля 2010

Вы можете сделать это с помощью внешнего соединения

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;
1 голос
/ 27 апреля 2010
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 голос
/ 27 апреля 2010

как вы можете увидеть, нет ли в нем 2 или более команд?

Вы можете посчитать количество команд на одного учащегося, а затем отфильтровать только те, которые хотите увидеть:

SELECT student FROM
(
    SELECT student, COUNT(*) AS cnt
    FROM Table1
    GROUP BY student
) T1
WHERE cnt = 1
1 голос
/ 27 апреля 2010
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'
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...