【问题标题】:Mysql Like for alias columnMysql Like 用于别名列
【发布时间】:2018-03-18 06:02:24
【问题描述】:

我想用这个查询在别名列中搜索:

SELECT *, (SELECT `name` FROM agent WHERE agent.`id`=sys_users.`agent_id`) as agentName FROM `sys_users` where agentName like '%company%'

但是当我执行查询时,MySQL 会告诉我:

错误代码:1054 “where 子句”中的未知列“agentName”

【问题讨论】:

    标签: mysql alias sql-like


    【解决方案1】:

    标准 SQL 不允许在 WHERE 子句中引用列别名(请参阅 manual)。您需要改用HAVING,即

    SELECT *, 
       (SELECT `name` FROM agent WHERE agent.`id`=sys_users.`agent_id`) as agentName 
       FROM `sys_users` HAVING agentName like '%company%'
    

    由于您希望能够使用OR 条件,因此使用JOIN 可能会更好,即

    SELECT *
        FROM sys_users JOIN agent ON agent.id = sys_users.agent_id
        WHERE sys_users.username LIKE '%company%' OR agent.name LIKE '%company%'
    

    请注意,在这种情况下,您需要注意 sys_usersagent 具有同名列的情况,因此最好明确列出所需的列。

    【讨论】:

    • 没关系,但我想同时使用 WHEREHAVING 例如:SELECT *, (SELECT name` FROM agent WHERE agent.id =sys_users.agent_id) as agentName FROM sys_users WHERE username like '%company%'` HAVING agentName like '%company%'` 但我想在用户名OR agentName
    • 您也可以将用户名放在 HAVING 子句中,即 HAVING username LIKE '%company%' OR agentName LIKE '%company%' 但是这是低效的(MySQL 不会优化它),所以它可能最好使用JOIN。我将编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    相关资源
    最近更新 更多