Ошибка при использовании столбца из основного запроса в подзапросе

#mysql #select

#mysql #выберите

Вопрос:

Я не продвинутый пользователь mysql, поэтому вам придется потерпеть это вместе со мной.

Я пытаюсь использовать cref переменную в одном из подзапросов, но я получаю сообщение об ошибке, что cref столбец не существует. Если я удалю подзапрос, он отобразит столбец, так что столбец определенно существует.

Также, если есть какие-либо другие ошибки, был бы признателен за предупреждение 🙂

 SELECT DISTINCT
  (contractorsRef) AS cref,
  RIDGROUP AS ridg,
  (
    SELECT count(*) FROM (
      SELECT DISTINCT subcontractorRef
      FROM request
      INNER JOIN request_config
        ON request_config.RIDGROUP = request.RIDGROUP
      WHERE request_config.contractorsRef = cref  --### ERROR HERE
        AND currenttaxyear =2011
        AND weekno =31
  ) AS xx
) as xxx
FROM request_config
WHERE currenttaxyear =2011
  AND weekno =32
  AND contractorsRef <>132
  

Ответ №1:

попробуйте это (обратите внимание, что я пометил request_config во внешнем выборе как outer_config , а ссылку во внутреннем выборе обозначил меткой

 SELECT DISTINCT (contractorsRef) AS cref, RIDGROUP AS ridg, 
    (select count(DISTINCT subcontractorRef)
    FROM request
    INNER JOIN request_config ON request_config.RIDGROUP = request.RIDGROUP
    WHERE request_config.contractorsRef = outer_config.contractorsRef 
    AND currenttaxyear =2011
    AND weekno =31) AS xxx
FROM request_config outer_config
WHERE currenttaxyear =2011
AND weekno =32
AND contractorsRef <>132
  

РЕДАКТИРОВАТЬ
пожалуйста, попробуйте еще раз, я удалил 1 ненужный слой из подзапроса

Комментарии:

1. извините. написано #1054 — Неизвестный столбец ‘outer_config.contractorsRef’ в ‘where clause’ отсутствует

2. Хорошо, не могли бы вы, пожалуйста, попробовать еще раз?

3. это то, что у меня было изначально, но count (DISTINCT Subcontractor ref) вызывает медленный запрос, поэтому я прочитал count (*), а затем использовал для него подзапрос, чтобы ускорить его. Есть еще идеи?

4. Я вижу. В этом случае я действительно предлагаю вам опубликовать свой рабочий запрос в новом сообщении и спросить, как его ускорить. Этот подзапрос не ускорит его, ИМХО.

Ответ №2:

Подзапросы выполняются первыми, и их результаты используются в качестве входных данных для внешнего запроса. Итак, пока вы создаете coulmn cref во внешнем запросе, он еще не существует, когда выполняется ваш подзапрос.

Вероятно, вы можете решить свою проблему, объединив два запроса. Начните с вашего подзапроса и соедините с request_config . Затем добавьте соответствующие условия и соответствующие столбцы