WedX - журнал о программировании и компьютерных науках

Mysql: считать псевдонимом где или иметь

Я борюсь с двумя, по-видимому, простыми запросами.

Запрос №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:

Я должен был использовать псевдоним COUNT(*) в предложении HAVING в соответствии с этими ответами, и на самом деле это работает (см. 3-й запрос), но забавный факт заключается в том, что запрос n1 ОЧЕНЬ похож, и все же он работает. Я уверен, что это меняет количество строк в соединительной таблице, к которым я подсчитываю (у одного более 4 тыс. строк (запрос n2), у другого меньше 100 (запрос n1).

В дополнение к этому запрос n2 (рабочая версия) использует `, а запрос n1 (рабочая) использует '. Я весьма озадачен...

Может кто-нибудь объяснить мне, что я делаю (или думаю) неправильно?

16.06.2017

Ответы:


1

ГДЕ 1 = 1 И 'num_installazioni' ‹ 5

Здесь вы не используете псевдоним — вы проверяете, является ли текстовый литерал num_installazioni "меньше" 5.

https://dev.mysql.com/doc/refman/5.7/en/identifiers.html

Он «работает», так как не выдает ошибку, потому что вы не использовали здесь псевдоним в предложении WHERE (чего вы не можете). Если вы думаете, что это дает вам результат, который делает в любом смысле, однако, вы совершенно не правы здесь.

16.06.2017
  • Я думаю, ты прав, я тоже это имел в виду, но меня отвлек тот факт, что первый на самом деле возвращает какой-то результат, мне пришлось проверить их вручную, чтобы понять, что что-то не так (БД не содержит данных, которые я что-то знать). Я отмечу это как принятое, спасибо 16.06.2017
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]