Вопрос
Я разместил в пятницу (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». «CUSIMENT_ID»: неверный идентификатор
Это потому, что это за пределами внутреннего соединения кронштейна, то есть вне охвата? Я очень новый для SQL и не могу понять, почему он не будет работать. Я могу заставить его работать, используя SELECT SUNQUERIES (без присоединения), но я хочу также работать с присоединениями.
Если это имеет значение, я использую Toad для Oracle.
Спасибо.
Решение
Потому что вы присоединяетесь к запросу. Дайте название на этот запрос и обратитесь к этому так:
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
Другие советы
Для одной вещи подзапрос должен иметь псевдоним. Изменять:
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
В списке Secure Subquery, как:
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
Теперь после этого вы можете ударить другие проблемы, но я надеюсь, что это начнет.