#mysql #sql
Вопрос:
Схема
- Исследователь(ID (PK), )
- Активность (PID (publication_FK, PK) , RID (researcher_FK , PK))
- Публикация (идентификатор (PK) , Год)
PID
, RID
по Activity
форме его составной PK и каждый соответствуют FK таблиц Publication
и Researcher
, соответственно
Запрос
Для каждого исследователя, у которого было не менее 2 публикаций, извлеките все их публикации с 2000 года
Попытка
SELECT PID, RID
FROM Activity
WHERE RID IN (SELECT RID
FROM Activity
GROUP BY RID
HAVING COUNT(RID) >= 2)
Как отфильтровать этот промежуточный результат по годам публикации?
Комментарии:
1. Отметьте свой вопрос в базе данных, которую вы используете.
Ответ №1:
Вам нужно присоединиться к publications
. Используя ваш подход:
SELECT a.PID, a.RID
FROM Activity a JOIN
Publications p
ON p.ID = a.PID
WHERE p.year >= 2000 AND
a.RID IN (SELECT a2.RID
FROM Activity a2
GROUP BY a2.RID
HAVING COUNT(*) >= 2
) ;
Комментарии:
1. Спасибо. Знаете ли вы , фильтрует ли он все записи публикаций за год, или вложенный запрос сначала возвращается, а затем объединяется с публикацией и результаты фильтруются?
2. @Scb . . . Ссылки разделены, поэтому фильтрация выполняется только во внешнем запросе.