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.
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.