SELECT
p.ID, r.ID, z.ID,
CONCATE_WS(' ', z.name, z.surename) AS fullname
FROM
table p
JOIN
table2 r
JOIN
table3 z
WHERE
fullname COLLAT UTF8_GENERAL_CI LIKE %John Newman%
ORDER BY
p.start_date
错误:
专栏'全名'在WHERE子句中找不到
答案 0 :(得分:1)
您不能在where子句中使用 fullname 别名,而应使用
在你的where子句中 CONCATE_WS(' ', z.name, z.surename)
。
您只能在GROUP BY,ORDER BY或HAVING子句中使用列别名。
标准SQL不允许您引用WHERE子句中的列别名。强制执行此限制是因为执行WHERE代码时,可能尚未确定列值。
答案 1 :(得分:1)
MySQL有一个方便的扩展,您可以在此上下文中使用having
,而不是where
:
SELECT p.ID, r.ID, z.ID, CONCATE_WS(' ', z.name, z.surename) AS fullname
FROM table p JOIN
table2 r JOIN
able3 z
HAVING fullname COLLAT UTF8_GENERAL_CI LIKE %John Newman%
ORDER BY p.start_date;
我认为你错过了on
条款。如果您不打算on
条款,那么您应该明确并使用cross join
代替join
。
答案 2 :(得分:0)
问题是你在where子句中遇到allias。 select语句被SQL评估为最后一个,所以它并不知道你的全名'并且给你一个永远不会进入选择部分的错误,因此它永远不会发现你的全名是什么意思。
答案 3 :(得分:0)
fullname
是别名,而在where子句中,您应该使用列名或用于连接它们的相同函数CONCAT_WS(' ', z.name, z.surename)
试试这个:
SELECT p.ID,r.ID,z.ID, CONCAT_WS(' ', z.name, z.surename) AS fullname
FROM table p JOIN table2 r JOIN table3 z
WHERE
CONCAT_WS(' ', z.name, z.surename) COLLATE UTF8_GENERAL_CI LIKE '%John Newman%'
ORDER BY p.start_date