Ссылка на вычисленный / динамический столбец или подзапрос MySQL - PullRequest
1 голос
/ 02 августа 2011

У меня есть две таблицы - лиды и брошюры.Каждый руководитель отдела продаж может запросить ноль или более брошюр.Я могу написать следующий запрос, чтобы получить количество брошюр, запрошенных по каждому запросу:

SELECT
    id,
    (SELECT COUNT(*) FROM brochures WHERE lead = l.id) AS 'BrochureCount'
FROM leads l

Если я хочу показать только потенциальных клиентов, которые запросили несколько брошюр, я могу повторить подзапрос в предложении WHERE:

SELECT
    id,
    (SELECT COUNT(*) FROM brochures WHERE lead = l.id) AS 'BrochureCount'
FROM leads l
WHERE
    (SELECT COUNT(*) FROM brochures WHERE lead = l.id) > 0

Но это, вероятно, будет запускать подзапрос дважды, что приведет к еще более медленному запросу.

Возможно ли сослаться на BrochureCount в предложении WHERE, либо по имени, номеру столбца, либо по некоторомуДругой формат?

Спасибо за ваше время,

Адам

Ответы [ 4 ]

1 голос
/ 02 августа 2011

Я нашел, как он называется, и что это невозможно сделать.

Это называется псевдонимом столбца, и, очевидно, его нельзя использовать в предложении WHERE.Из документов MySQL :

Стандартный SQL не позволяет ссылаться на псевдоним столбца в предложении WHERE.Это ограничение наложено потому, что при выполнении кода WHERE значение столбца может еще не быть определено.

0 голосов
/ 12 июля 2012

Самый простой способ ссылки на вычисляемый столбец - с помощью предложения HAVING. В общем:

<subquery> HAVING <expression>

эквивалентно

SELECT * from (<subquery>) WHERE <expression>
0 голосов
/ 02 августа 2011

Попробуйте следующее:

SELECT id, BrochureCount
FROM(
    SELECT id, (SELECT COUNT(*) FROM brochures WHERE lead = l.id) AS 'BrochureCount'
    FROM leads l) data
Where data.BrochureCount > 0
0 голосов
/ 02 августа 2011

лидов и сколько брошюр они заказали, если хотя бы 1:

SELECT
  leads.id,
  COUNT(brochures.lead) AS `BrochureCount`
FROM
  leads
INNER JOIN
  brochures
ON
  leads.id = brochures.lead
GROUP BY
  leads.id

Если вам нужны все лиды и количество брошюр, даже если у них 0 связанных брошюр:

SELECT
  leads.id,
  COUNT(brochures.lead) AS `BrochureCount`
FROM
  leads
LEFT OUTER JOIN
  brochures
ON
  leads.id = brochures.lead
GROUP BY
  leads.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...