MySQL 别名和字段具有相同的名称 - 在 Having 子句中评估哪个?

标签 mysql case alias having

我有一个 mysql 查询,它从多个我无法编辑的表中连接电话号码,我需要创建一个与其中一个表具有相同字段名称的输出。我正在使用 CASE 语句来执行此操作。这是我的查询的一个简单版本:

SELECT t1.`id` as id,
CASE 
    WHEN t1.`has_company_phone` = 1  THEN t1.`company_phone`
    ELSE t2.`phone`
END AS `phone`
FROM `input_table1` t1, 
LEFT OUTER JOIN `input_table2` t2
    ON (t2.`id` = t1.`matched_company_id`)
HAVING phone IS NOT NULL;

编辑: 在此查询中,HAVING 子句中评估的是 t2.phone、别名电话还是两者?我的目标是在此 having 子句中评估别名。

EG:t1.company_phone 存在,但 t2.phone 为 NULL。我想使用 t1.company_phone 包含此记录,并将别名设为 phone。如果我将 HAVING 更改为 WHERE 子句,则该记录将不会显示。

最佳答案

在 MySQL 中,HAVING 子句将始终从选择列表中搜索所需的项目。

在选择列表中找到后,将使用找到的项目。

如果未找到,则抛出错误。

更新:

实际上,在您的 SQL 中,您应该将 HAVING 替换为 WHERE,因为它与 WHERE 相同。 使用 WHERE,困惑就会消失。 WHERE 子句将始终使用真实的表列,而不是别名。

关于MySQL 别名和字段具有相同的名称 - 在 Having 子句中评估哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35427117/

相关文章:

mysql - 如何在mysql函数中使用别名

mysql - 防止 MySQL 更改 DATETIME

MySQL - 计算自上次登录以来一个用户更改了多少个 "items"

MYSQL 使用带大小写的 concat

MySQL 与 group by 的案例

git - 在命令行中编辑 Git 别名

mysql - mysql 语句中的语法错误

php - 将购物车项目存储到 cookie 和数据库中

MySQL CASE 在一个查询中设置一个额外的字段值

c++ - 什么是 "template<class T> using owner = T;"?