Pergunta
Eu postei na sexta -feira (SQL Multiple Count) e teve algumas respostas.
Tendo tentado implementá -los hoje, continuo recebendo o mesmo erro.
Meu código SQL agora é:
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
Eu continuo recebendo o erro:
ORA-00904: "mbddx_treatment_group". "Study_id": Identificador inválido
É porque está fora do suporte interno de junção, ou seja, fora do escopo? Sou muito novo no SQL e não consigo entender por que não funciona. Eu posso funcionar usando subconsposições selecionadas (sem junções), mas também quero trabalhar com junções.
Se importa algum, estou usando o Toad para Oracle.
Obrigado.
Solução
Porque você se junta a uma consulta. Dê um nome a essa consulta e consulte a maneira assim:
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
Outras dicas
Por um lado, uma subconsulta deve ter um pseudônimo. Mudar:
inner JOIN ( SELECT COUNT ( MBDDX_TREATMENT_GROUP.GROUP_NO )
FROM MBDDX_TREATMENT_GROUP )
ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID
para
inner JOIN ( SELECT COUNT ( MBDDX_TREATMENT_GROUP.GROUP_NO )
FROM MBDDX_TREATMENT_GROUP ) as CountAlias
ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID
A segunda coisa é que você deve incluir todas as colunas que planeja usar. No momento, a subconsência apenas seleciona uma contagem, mas o ON
Referências da cláusula STUDY_ID
. Você pode consertar isso incluindo STUDY_ID
Na lista de seleção da subconeração, como:
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
Agora, depois disso, você pode enfrentar outros problemas, mas espero que isso faça você começar.