2012-06-27 3 views
0

У меня есть три таблицы, называемые edum_application, edua_courseEvent и edua_coursePackage.Могу ли я оптимизировать этот SQL-запрос каким-либо образом?

Я пишу вопрос, чтобы получить все приложения из edum_application, где все coursePackage_id в courseEvent является й и всеми они имеют тот же applicationWrapper_id

Этот запрос работает, но это эффективное?

SELECT app.application_id, app.applicationWrapper_id 
FROM edum_application AS app 
    INNER JOIN edua_courseEvent AS ce ON app.courseEvent_id = ce.courseEvent_id 
WHERE app.applicationWrapper_id = 662 
    AND app.courseEvent_id IN 
    (
     -- Is this really efficient? 
     SELECT ce.courseEvent_id 
     FROM edua_courseEvent AS ce 
     WHERE ce.coursePackage_id = 
     (
      SELECT coursePackage_id 
      FROM edua_courseEvent AS ce 
      WHERE ce.courseEvent_id = 13377 
     ) 
    ) 

Выход:

application_id applicationWrapper_id 
72643   662 
72645   662 
72646   662 
72647   662 

ответ

1

Попробуйте это:

SELECT  app.application_id, app.applicationWrapper_id 
FROM  edum_application AS app 
INNER JOIN edua_courseEvent AS ce 
ON   app.courseEvent_id = ce.courseEvent_id 
INNER JOIN edua_courseEvent AS ce2 
ON   ce.coursePackage_id = ce2.coursePackage_id 
WHERE  app.applicationWrapper_id = 662 
AND  ce2.courseEvent_id = 13377 

Вы, возможно, потребуется DISTINCT в зависимости от количества строк в/связи между различными таблицами.

+0

С уважением, но это не возвращает никаких результатов по мере нарушения кода. Кроме того, мне не нужны отличительные для конкретной «обертки», но все приложения, в которых _courseEvents_ имеют одинаковый _coursePackage_Id_, значение, которое я не знаю, когда я прихожу к этому запросу. – Fr3gU

+0

Удивительный. Это отлично работает. Я также создал индекс на applicationWrapper_id, как это предлагается в плане выполнения. Благодаря! – Fr3gU

Смежные вопросы