سؤال
لقد نشرت يوم الجمعة (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
الآن بعد ذلك ، قد تضرب مشكلات أخرى ، لكنني آمل أن تبدأ هذا.