Сегодня я чувствую себя глупо, но у меня есть запрос, который я хочу написать, но я чувствую, что это может быть вне досягаемости.Можно ли написать этот вопрос - чего я не вижу?
Я попытаюсь упростить задачу только ради простоты.
У меня есть таблица, как этот
[Table A]
ID | Class | Name
0 A Sarah
1 B Tom
2 C Bob
3 A Jen
4 A John
5 A Jack
6 B Name1
7 B Jack
8 B Bob
мне нужно, чтобы получить все записи (фактические записи не группируются по) для всех людей, которые разделяют один и тот же класс, но со следующими ограничениями:
Только получите мне записи, где Джен, Джек & Джон разделяют один и тот же класс (только те 3 нет и не дублируют).
Это означает, что записи будут приходить в виде наборов 3.
Таким образом, в приведенном выше примере я хотел бы получить
3 A Jen
4 A John
5 A Jack
До сих пор я получил:
SELECT Class, Name, COUNT(*)
FROM TableA
GROUP BY Class, Name
HAVING COUNT(*) = 3
Но в дополнение к этому не работает правильно, я не могу указать, что записи должны иметь имена Джен, Джек и Джон и ничего больше.
EDIT: я был в состоянии сделать это, используя внутренний запрос, но это немного slow..If кто-нибудь знает более оптимальный, пожалуйста, дайте мне знать:
SELECT ....
FROM TableA t1
join TableA t2 on t1.class = t2.class
WHERE t1.name = 'Jen' AND t2.name = 'John'
AND t1.class IN(SELECT class FROM TableA t3 WHERE t3.name = 'Jack')))
Я мог бы, вероятно, включили t3 с исходный запрос, но я предпочитаю этот способ для удобочитаемости.
Не уверен, что это точный ответ, но запрос, который я искал, работал с использованием этого стиля, и я попытался написать простой, используя тот же метод для тех, кто застрял, как и я.
Требование не ясное - как только станет ясно, возможно, написать запрос будет проще. Вы действительно ищете для всех классов со следующими свойствами: (1) Джен, Джон и Джек все берут этот класс; (2) Никто не принимает этот класс? Если это так, 'select * from tableA, где класс in (select class from ... where ...)' должен находиться в правильном направлении. – mathguy
@mathguy - без проблем - отредактирует вопрос. – AngelicCore
В отредактированной форме вы больше не спрашиваете, что класс будет принимать только 3 ученика, не более, не менее. (Не менее понятно, но вы удалили «больше».) И действительно, вы добавили ряд с Сарой, взяв класс A, но результат не показывает ее. Просьба уточнить. – mathguy