Question

posté le vendredi ( sql nombre multiple ) et a eu quelques réponses.

Après avoir essayé de les mettre en œuvre aujourd'hui, je continue à obtenir la même erreur.

Mon code SQL est maintenant:

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

Je continue à obtenir l'erreur:

  

ORA-00904:. "MBDDX_TREATMENT_GROUP" "STUDY_ID": identificateur invalide

Est-ce parce qu'il est en dehors de la jointure interne support, à savoir hors de portée? Je suis très nouveau à SQL et ne peut pas comprendre pourquoi cela ne fonctionnera pas. Je peux le faire fonctionner à l'aide des sous-requêtes de sélection (sans joint), mais je veux aussi être capable de travailler avec des jointures.

S'il importe tout ce que je me sers de Toad for Oracle.

Merci.

Était-ce utile?

La solution

Parce que vous vous joignez à une requête. Donnez un nom à cette requête, et se référer à cette façon:

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

Autres conseils

D'une part, une sous-requête doit avoir un alias. Changement:

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

La deuxième chose est que vous devez inclure toutes les colonnes que vous prévoyez d'utiliser. En ce moment, la sous-requête sélectionne juste un nombre, mais les références de la clause de ON STUDY_ID. Vous pouvez résoudre ce problème en incluant STUDY_ID dans la liste de sélection des sous-requêtes, comme:

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

Après cela, vous pouvez frapper d'autres questions, mais je suis en espérant que cela va vous aider à démarrer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top