Вложенный Запрос — Двухуровневая Фильтрация

#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 . . . Ссылки разделены, поэтому фильтрация выполняется только во внешнем запросе.