我有一个 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/