我张贴上周五( SQL多计数),并有一些反应。

尝试过今天实现这些,我不断收到同样的错误。

我的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和不明白为什么它不会工作。我可以得到它的工作使用子查询选择(无连接),但我想也能够将工作与连接。

如果它的事项任何我使用蟾蜍为Oracle。

感谢。

有帮助吗?

解决方案

由于您使用联接的查询。提供一个名称该查询,并且是指这样的说法:

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

其他提示

一方面,子查询必须具有一个别名。变化:

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

现在在这之后,你会打等问题,但我希望这将让你开始。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top