#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
. Затем добавьте соответствующие условия и соответствующие столбцы