سؤال

لقد نشرت يوم الجمعة (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_TEREATMENT_GROUP". "Study_id": معرف غير صالح

هل لأنه خارج شريحة الانضمام الداخلية ، أي خارج النطاق؟ أنا جديد جدًا على SQL ولا يمكنني فهم سبب عدم عمله. يمكنني تشغيلها باستخدام الفائزين الفرعيين المختارين (بدون توصيلات) ، لكنني أريد أيضًا أن أكون قادرًا على العمل مع JOINS.

إذا كان الأمر مهمًا ، فأنا أستخدم Toad لـ 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 في قائمة Subser Select ، مثل:

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