Oracle SQL help - PullRequest
       7

Oracle SQL help

0 голосов
/ 25 октября 2010

Я отправил в пятницу ( sql множественный счет ) и получил несколько ответов.

Попытавшись реализовать их сегодня, я продолжаю получать ту же ошибку.

Мой код SQL теперь:

SELECT MBDDX_STUDY.STUDY_NAME,
       COUNT(MBDDX_EXPERIMENT.STUDY_ID)
AS     NUMBER_OF_EXPERIMENTS
FROM MBDDX_STUDY
INNER JOIN MBDDX_EXPERIMENT
       ON MBDDX_STUDY.ID = MBDDX_EXPERIMENT.STUDY_ID
INNER JOIN (SELECT COUNT(MBDDX_TREATMENT_GROUP.GROUP_NO)
            FROM MBDDX_TREATMENT_GROUP)
       ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID
GROUP BY MBDDX_STUDY.STUDY_NAME

Я получаю сообщение об ошибке:

ORA-00904: "MBDDX_TREATMENT_GROUP". "STUDY_ID": неверный идентификатор

Это потому, что он находится за пределами внутреннего соединительного кронштейна, то есть выходит за рамки?Я очень плохо знаком с SQL и не могу понять, почему он не работает.Я могу заставить его работать, используя отдельные подзапросы (без объединений), но я также хочу иметь возможность работать с объединениями.

Если это имеет какое-либо значение, я использую Toad для Oracle.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 25 октября 2010

Потому что вы присоединяетесь с запросом. Дайте имя этому запросу и обращайтесь к нему так:

SELECT MBDDX_STUDY.STUDY_NAME
     , COUNT ( MBDDX_EXPERIMENT.STUDY_ID )
AS     NUMBER_OF_EXPERIMENTS
  FROM MBDDX_STUDY
 INNER JOIN MBDDX_EXPERIMENT
    ON MBDDX_STUDY.ID = MBDDX_EXPERIMENT.STUDY_ID
 inner JOIN ( SELECT study_id, COUNT ( MBDDX_TREATMENT_GROUP.GROUP_NO )
            FROM MBDDX_TREATMENT_GROUP  group by study_id ) AS my_query
    ON my_query.STUDY_ID = MBDDX_STUDY.ID
 GROUP BY MBDDX_STUDY.STUDY_NAME
2 голосов
/ 25 октября 2010

С одной стороны, подзапрос должен иметь псевдоним. Изменения:

inner JOIN ( SELECT COUNT ( MBDDX_TREATMENT_GROUP.GROUP_NO )
    FROM MBDDX_TREATMENT_GROUP )
ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID

до

inner JOIN ( SELECT COUNT ( MBDDX_TREATMENT_GROUP.GROUP_NO )
    FROM MBDDX_TREATMENT_GROUP ) as CountAlias
ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID

Во-вторых, вам нужно включить все столбцы, которые вы планируете использовать. Прямо сейчас подзапрос просто выбирает счетчик, но предложение ON ссылается на STUDY_ID. Это можно исправить, включив STUDY_ID в список выбора подзапроса, например:

inner JOIN ( 
    SELECT  STUDY_ID
    ,       COUNT(MBDDX_TREATMENT_GROUP.GROUP_NO) as GroupCount
    FROM MBDDX_TREATMENT_GROUP) as CountAlias
ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID

Теперь после этого вы можете столкнуться с другими проблемами, но я надеюсь, что это поможет вам начать.

...