gpt4 book ai didi

Mysql:用where或having算作别名

转载 作者:行者123 更新时间:2023-11-29 18:46:34 25 4
gpt4 key购买 nike

我正在努力解决两个看似简单的查询。

查询 n1(有效):

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;

查询 n2(不起作用):

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;

查询 n2(工作版本):

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 上找到的其他一些答案,我真的无法弄清楚为什么第一个有效:

根据这些答案,我应该在 HAVING 子句中使用 COUNT(*) 别名,事实上它有效(参见第三个查询),但有趣的事实是查询 n1 非常相似,但它有效。我确定它改变的是我所计数的连接表的行数(一个有超过 4k 行(查询 n2),另一个少于 100 行(查询 n1)。

此外,查询 n2(工作版本)使用 `,而查询 n1(工作版本)使用 '。我很困惑...

有人可以解释一下我做(或想)错了什么吗?

最佳答案

WHERE 1 = 1 AND 'num_installazioni' < 5

您在这里没有使用别名 - 您正在检查文本文字 num_installazioni 是否“小于”5。

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

它“有效”,因为它不会抛出错误,因为您没有在此处的 WHERE 子句中使用别名(您不能。)如果您认为这给了您一个结果是有道理的,但是,你完全错了。

关于Mysql:用where或having算作别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44586614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com