MySQL коррелированные подзапросы - PullRequest
0 голосов
/ 28 марта 2012

Может ли кто-нибудь помочь мне, у меня есть проблема с коррелированными вложенными подзапросами то есть, когда я пытаюсь использовать грандиозный родительский столбец во вложенном подзапросе, я получаю эту ошибку

Код ошибки: 1054 Неизвестный столбец 'scu.iUserId' в 'предложении where'

Запрос:

    SELECT 
      scu.iUserId,
      (SELECT 
        SUM(
          sbs.`iNoPointsBeginning` + 
          (SELECT 
            COALESCE(SUM(BehaviorPts), 0) AS StudentPts 
          FROM
            (SELECT 
              (
                COUNT(sbis.iIncidentSubmissionId) * sbi.iPointValue
              ) AS BehaviorPts 
            FROM
              scn_behavior_incident_submission sbis 
              JOIN scn_behavior_incident_actors sbia 
                ON sbia.iIncidentSubmissionId = sbis.iIncidentSubmissionId 
              LEFT JOIN scn_behavior_incidents sbi 
                ON sbi.iIncidentId = sbis.iBehaviorIncidentId 
            WHERE sbia.iUserId = scu.iUserId
              AND sbia.eActorType  'Witness' 
              AND sbis.iSchoolId = '875' 
            GROUP BY sbis.iBehaviorIncidentId) AS BehaviorTotal)
        ) AS stu_pt 
      FROM
        scn_behavior_settings sbs 
      WHERE sbs.`iSchoolId` = '875') 

    FROM
      scn_sections_members AS scm 
      INNER JOIN scn_users AS scu 
        ON scu.iUserId = scm.iStudentId 

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Два уровня вложения вызывают эту ошибку.Сам внутренний запрос не «знает» scu, который определен во внешнем запросе.

Попробуйте переписать его без встроенных подзапросов.Не уверен, что это правильный путь, но вы поймете идею.(таблица sbs кажется не связанной с другими, поэтому я сделал CROSS JOIN. Правильно отредактируйте, если есть связь):

SELECT 
    scu.iUserId,
    sbs.iNoPointsBeginning 
    + COUNT(sbis.iIncidentSubmissionId) * COALESCE(sbi.iPointValue, 0)
      AS stu_pt 
FROM
    ( SELECT 
          SUM(sbs.iNoPointsBeginning) AS iNoPointsBeginning
      FROM 
          scn_behavior_settings sbs 
      WHERE sbs.iSchoolId = '97'
    ) AS sbs 
  CROSS JOIN
      scn_sections_members AS scm 
  INNER JOIN scn_users AS scu 
    ON scu.iUserId = scm.iStudentId 
  LEFT JOIN
          scn_behavior_incident_submission sbis 
        JOIN scn_behavior_incident_actors sbia 
          ON  sbia.iIncidentSubmissionId = sbis.iIncidentSubmissionId 
          AND sbia.eActorType = 'Witness' 
          AND sbis.iSchoolId = '97' 
        LEFT JOIN scn_behavior_incidents sbi 
          ON sbi.iIncidentId = sbis.iBehaviorIncidentId 
    ON sbia.iUserId = scu.iUserId
GROUP BY scu.iUserId
       , sbis.iBehaviorIncidentId
1 голос
/ 28 марта 2012

Если вы (временно) удалите этот запутанный клубок подзапросов, вы увидите, что говорите:

SELECT scu.iUserId 
FROM scn_sections_members AS scm 
INNER JOIN scn_users AS scu 
ON scu.iUserId = scm.iStudentId

Чтобы MySQL сообщал вам, что столбец неизвестен, это должно означать, что столбец не существует. Какое определение для scn_users? Поместите столбец iUserId в эту таблицу, и тогда, по крайней мере, эта часть вашей проблемы будет закончена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...