Pregunta
Me publicado el viernes ( sql múltiples recuento ) y tenía unas cuantas respuestas.
Después de haber intentado ponerlas en práctica hoy en día, sigo obteniendo el mismo error.
Mi código SQL actual es:
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
sigo obteniendo el error:
ORA-00904: "MBDDX_TREATMENT_GROUP" "STUDY_ID": inválido identificador
¿Es porque está fuera de la combinación interna del soporte, es decir, fuera de alcance? Soy muy nuevo a SQL y no puedo entender por qué no lo puedo trabajar. Puedo conseguir que funcione con productos escogidos subconsultas (sin juntas), pero quiero también ser capaz de trabajar con uniones.
Si importa cualquier estoy usando Toad para Oracle.
Gracias.
Solución
Debido a que se une con una consulta. Dar un nombre a esa consulta, y se refieren a ella de esa manera:
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
Otros consejos
Por un lado, una subconsulta debe tener un alias. Cambio:
inner JOIN ( SELECT COUNT ( MBDDX_TREATMENT_GROUP.GROUP_NO )
FROM MBDDX_TREATMENT_GROUP )
ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID
a
inner JOIN ( SELECT COUNT ( MBDDX_TREATMENT_GROUP.GROUP_NO )
FROM MBDDX_TREATMENT_GROUP ) as CountAlias
ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID
La segunda cosa es que usted tiene que incluir todas las columnas que va a utilizar. En este momento, la subconsulta simplemente selecciona una cuenta, pero las referencias cláusula ON
STUDY_ID
. Usted puede arreglar que al incluir STUDY_ID
en la lista de selección sub consulta, 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
Ahora, después de eso, que puede pegarle a otros temas, pero espero que esto le ayudará a empezar.