Domanda

Ho pubblicato il Venerdì ( SQL multipla conteggio ) e aveva alcune risposte.

Dopo aver cercato di attuarle oggi, continuo a ricevere lo stesso errore.

Codice My SQL ora è:

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

Continuo a ricevere l'errore:

  

ORA-00904:. "MBDDX_TREATMENT_GROUP" "STUDY_ID": non valido identificativo

E 'perché è al di fuori della inner join staffa, vale a dire fuori portata? Sono molto nuovo a SQL e non riesco a capire il motivo per cui non funzionerà. Posso farlo funzionare utilizzando selezionare subqueries (senza unisce), ma voglio essere in grado di lavorare con join.

Se è importante qualsiasi Sto usando Toad for Oracle.

Grazie.

È stato utile?

Soluzione

Perché si partecipa con una query. Dare un nome a tale query, e si riferiscono in questo modo:

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

Altri suggerimenti

Per prima cosa, una subquery deve avere 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 seconda cosa è che è necessario includere tutte le colonne che si intende utilizzare. In questo momento, la subquery solo seleziona un conteggio, ma i riferimenti clausola ON STUDY_ID. Si può rimediare inserendo STUDY_ID nella subquery nell'elenco di selezione, come:

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

Ora, dopo di che, si potrebbe colpire altre questioni, ma spero questo ti permetterà di cominciare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top