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】:

WHEREGROUP 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语法错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL — SQL 语法错误(WHERE IN UNION)

java连接sqlserver,提示语法错误

mysql数据库出现错误代码1064是啥原因?

错误 1604 - 错误的语法 MySQL [关闭]

eclipse上的语法错误[关闭]

MySQL在where子句中选择查询