mysql查询使用别名抛出错误

时间:2015-08-12 18:23:19

标签: mysql

运行以下查询

SELECT p.id as pid,p.name as pname, p.email,p.phone,p.created as pcreated,
p.updated as pupdated, GROUP_CONCAT(g.name) AS groups FROM ft_smsender_persons p 
JOIN ft_smsender_persons2groups AS p2g ON p.id = p2g.person_id JOIN ft_smsender_groups AS g ON g.id = p2g.group_id 
WHERE 1=1 AND deleted = 0 AND p.id as pid LIKE '%7%' OR pname LIKE '%7%' OR 
email LIKE '%7%' OR phone LIKE '%7%' OR pcreated LIKE '%7%' 
OR pupdated LIKE '%7%' OR groups LIKE '%7%' group by pname, email ORDER BY pid asc

p.id as pid LIKE '%7%'

上给我一个错误

如果我像pid like %7%一样使用它,它会给我一个错误,说pid是未知列

查询是动态生成的,因此我的范围非常小,如何通过我的代码修复它;在mysql中有什么办法吗?

3 个答案:

答案 0 :(得分:2)

可以在查询选择列表中使用别名为列提供不同的名称。您可以在GROUP BY,ORDER BY或HAVING中使用别名 条款引用该栏目。

但是,

标准SQL不允许引用列
WHERE子句中的别名。这个限制是 强加,因为WHERE子句是 评估后,列值可能还没有 已经确定。

详细信息:https://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html

答案 1 :(得分:1)

澄清Being Sunny说的内容......除非在聚合函数中引用,否则不应在查询的where子句部分中为列使用别名。在选择列之前,查询使用where子句确定如何使用连接条件缩小已连接表中的行的范围。因此,在非聚合函数的where子句中引用别名列名将导致Error 1054: unknown column name

尝试在where子句中从查询中删除这些别名:

SELECT p.id as pid, p.name as pname, p.email, p.phone, p.created as pcreated,
p.updated as pupdated, GROUP_CONCAT(g.`name`) AS groups FROM ft_smsender_persons p 
JOIN ft_smsender_persons2groups AS p2g ON p.id = p2g.person_id JOIN ft_smsender_groups AS g ON g.id = p2g.group_id 
WHERE 1=1 AND deleted = 0 AND p.id LIKE '%7%' OR p.`name` LIKE '%7%' OR 
p.email LIKE '%7%' OR p.phone LIKE '%7%' OR p.created LIKE '%7%' 
OR p.updated LIKE '%7%' OR `groups` LIKE '%7%' group by pname, email ORDER BY pid asc;

答案 2 :(得分:0)

您不能在WHERE子句中使用别名。 如果这是一个动态生成的查询,您可以查看更改尝试给出' p.id' 'pid'的别名。这将删除结果集中的pid别名,但也会删除您获得的错误。

相关问题