WHERE选择上的MySQL语法错误[关闭]
Posted
技术标签:
【中文标题】WHERE选择上的MySQL语法错误[关闭]【英文标题】:MySQL Syntax ERROR on WHERE select [closed] 【发布时间】:2015-06-02 14:56:28 【问题描述】:我正在尝试让多个表选择其中 ID = 变量。
示例代码如下,我相信它应该可以工作,但不知何故我在语法上有一些错误。
SELECT c.id, c.firstname, c.surname, c.email, c.process, c.search_work, c.note,
group_concat(DISTINCT ce.enforcement) as enfor,
group_concat(DISTINCT cc.city) as city
FROM candidates AS c
LEFT JOIN candidates_language AS cl ON c.id = cl.candidates_id
LEFT JOIN candidates_enforcement as ce on c.id = ce.candidates_id
LEFT JOIN candidates_city as cc on c.id = cc.candidates_id
GROUP BY c.id, c.firstname, c.surname, c.email
WHERE c.id='8'
小提琴: http://sqlfiddle.com/#!9/25b1b/24
错误: 您的 SQL 语法有错误;查看与您的 mysql 服务器版本相对应的手册,以了解在 'WHERE id=' 附近使用的正确语法
请问有人可以指导我做错了什么吗?
【问题讨论】:
WHERE 必须在您的 GROUP BY 语句之前 :) WHERE 始终在 group by 之前,因为它在分组之前过滤数据。您可以在 group by 之后使用 HAVING 来做相反的事情。 【参考方案1】:WHERE
和 GROUP BY
子句之间的位置不匹配。 WHERE
子句应始终位于 GROUP BY
子句之前,因为 WHERE
子句将根据条件过滤数据集,并且在该过滤后的数据集上进行分组或 GROUP BY
将发生。所以在你的查询中应该是
WHERE c.id='8'
GROUP BY c.id, c.firstname, c.surname, c.email
【讨论】:
嘿拉胡尔,谢谢你的回答,当然是正确的,你从我这里得到了赞许。不幸的是,Nighthunter22 是第一个,所以公平地说,我标记了他的回答 :) 感谢您的理解 @Andurit 成为第一并不总是意味着更高质量的答案。就个人而言,我认为 Rahul 的回答在解释问题和解决方案方面做得更好。【参考方案2】:这就是你要找的:
SELECT c.id, c.firstname, c.surname, c.email, c.process, c.search_work, c.note,
group_concat(DISTINCT ce.enforcement) as enfor,
group_concat(DISTINCT cc.city) as city
FROM candidates AS c
LEFT JOIN candidates_language AS cl ON c.id = cl.candidates_id
LEFT JOIN candidates_enforcement as ce on c.id = ce.candidates_id
LEFT JOIN candidates_city as cc on c.id = cc.candidates_id
WHERE c.id='8' --where comes before the group by
GROUP BY c.id, c.firstname, c.surname, c.email;
【讨论】:
哎呀,这么简单?谢谢 没问题,如果对你有帮助,欢迎采纳;) 是的,实际上只是等到它让我这样做:)【参考方案3】:您收到此错误是因为 WHERE
子句应该出现在 GROUP BY
子句之前,正如其他人所提到的。我还想添加对SELECT
语法的文档的引用,它显示了语句的子句顺序。我已经为你总结了顺序,并在可选子句周围加上括号:
SELECT
FROM
[WHERE]
[GROUP BY]
[HAVING]
[ORDER BY]
[LIMIT]
附带说明,子句的执行顺序与它们的编写顺序不同。请参阅此question,了解更多信息。
【讨论】:
以上是关于WHERE选择上的MySQL语法错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章