Я борюсь с двумя, по-видимому, простыми запросами.
Запрос №1 (РАБОТАЕТ):
SELECT
cliente.*,
COUNT(*) AS 'num_installazioni',
CONCAT(provincia.nome, ' (', provincia.sigla, ')') AS 'provincia'
FROM q_cliente AS cliente
JOIN dettaglio_installazione AS dettinst ON cliente.id = dettinst.cliente
JOIN q_sede AS sede ON sede.id_cliente = cliente.id
JOIN quadra_provincia_table AS provincia ON provincia.id = sede.id_provincia
WHERE 1 = 1 AND 'num_installazioni' < 5
GROUP BY cliente.id;
Запрос №2 (НЕ РАБОТАЕТ):
SELECT
cliente.*,
CONCAT(provincia.nome, ' (', provincia.sigla, ')') AS 'provincia',
COUNT(*) AS 'num_pulizie'
FROM q_cliente AS cliente
JOIN q_sede AS sede ON sede.id_cliente = cliente.id
JOIN quadra_provincia_table AS provincia ON provincia.id = sede.id_provincia
JOIN quadra_attivita AS att ON cliente.id = att.id_cliente
WHERE 1 = 1 AND 'num_pulizie' >= 5 AND 'num_pulizie' <= 10
GROUP BY cliente.id;
Запрос №2 (РАБОЧАЯ ВЕРСИЯ):
SELECT
cliente.*,
COUNT(*) AS `pulizie`,
CONCAT(provincia.nome, ' (', provincia.sigla, ')') AS 'provincia'
FROM q_cliente AS cliente
JOIN q_sede AS sede ON sede.id_cliente = cliente.id
JOIN quadra_provincia_table AS provincia ON provincia.id = sede.id_provincia
JOIN quadra_attivita AS att ON cliente.id = att.id_cliente
GROUP BY cliente.id
HAVING `pulizie` >= 5 AND `pulizie` <= 10;
Контекст:
Я не могу понять, почему работает первый, согласно некоторым другим ответам, которые я нашел здесь, в stackoverflow:
- Использование псевдонима столбца в предложении WHERE MySQL запрос выдает ошибку
- Почему я не могу использовать псевдоним в столбце count(*) и ссылаться на него в предложении have?
Я должен был использовать псевдоним COUNT(*) в предложении HAVING в соответствии с этими ответами, и на самом деле это работает (см. 3-й запрос), но забавный факт заключается в том, что запрос n1 ОЧЕНЬ похож, и все же он работает. Я уверен, что это меняет количество строк в соединительной таблице, к которым я подсчитываю (у одного более 4 тыс. строк (запрос n2), у другого меньше 100 (запрос n1).
В дополнение к этому запрос n2 (рабочая версия) использует `, а запрос n1 (рабочая) использует '. Я весьма озадачен...
Может кто-нибудь объяснить мне, что я делаю (или думаю) неправильно?