-1

我在星期五发布(sql multiple count)并收到了一些回复。

今天尝试实施它们,我不断收到同样的错误。

我的 SQL 代码现在是:

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

我不断收到错误:

ORA-00904: "MBDDX_TREATMENT_GROUP"."STUDY_ID": 无效标识符

是不是因为它在内部连接括号之外,即超出范围?我对 SQL 很陌生,无法理解为什么它不起作用。我可以使用选择子查询(没有连接)使其工作,但我也希望能够使用连接。

如果重要的话,我正在使用 Toad for Oracle。

谢谢。

4

2 回答 2

4

因为你加入了一个查询。为该查询命名,并以这种方式引用它:

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
于 2010-10-25T11:00:08.610 回答
2

一方面,子查询必须有别名。改变:

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

第二件事是您必须包括您计划使用的所有列。现在,子查询只选择一个计数,但ON子句引用STUDY_ID. 您可以通过包含STUDY_ID在子查询选择列表中来解决此问题,例如:

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

在那之后,你可能会遇到其他问题,但我希望这能让你开始。

于 2010-10-25T11:02:54.337 回答