【问题标题】:How to resolve wrong syntax near HAVING COUNT DISTINCT?如何解决 HAVING COUNT DISTINCT 附近的错误语法?
【发布时间】:2018-02-06 15:23:48
【问题描述】:

这是我要执行的代码:

SELECT ID_K
FROM koncert,
     programi 
WHERE koncert.ID_K = programi.ID_K
GROUP BY koncert.ID_K
HAVING COUNT (DISTINCT programi.Salla) = 2

它返回此错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to
your MariaDB server version for the right syntax to use
near 'DISTINCT programi.Salla)=2 LIMIT 0, 25' at line 4.

试图改变不同的东西,但它仍然不起作用。

【问题讨论】:

  • 尝试删除 COUNT 和开头括号之间的虚假空格 ... COUNT(DISTINCT ...
  • 语法是完美的ANSI SQL。你确定你没有简化你的问题吗?
  • @jarlh:MySQL(和 MariaDB)不接受 COUNT 和开头括号之间的空格,除非 sql_mode 包含 IGNORE_SPACE。 (是的,ANSI 标准允许空格,但 MySQL 实现不允许。)
  • @spencer7593,好笑!!!
  • 修复了空白问题,但现在显示 ID_K 列不明确

标签: mysql sql count distinct having


【解决方案1】:

你应该使用 count(DISTINCT programi.Salla ) 而不是计数 (..) ..删除 COUNT 和 (...

SELECT koncert.ID_K
FROM koncert
INNER JOIN    programi  on koncert.ID_K = programi.ID_K
GROUP BY koncert.ID_K
HAVING COUNT(DISTINCT programi.Salla) = 2

但您还需要表名以避免歧义并使用显式连接语法

【讨论】:

  • 这个答案应该被赞成/接受..COUNT ( 问题已修复,相同的选择列名称已修复,并且此答案使用更好的 JOIN 语法,旧的逗号 JOIN 语法已超过 25 年,并且旧语法更难阅读..
  • @RaymondNijland 。非常感谢您的评论非常感谢.. .. 一个正确的答案(以及对新手的特别推荐)被否决了.. ..
【解决方案2】:

首先,当两个表中的列名相同时,您应该为列使用限定名称

SELECT ID_K FROM

应该是

SELECT programi.ID_K FROM

否则,您将得到模棱两可的列错误。否则,除了在调用COUNT(@spencer 已在评论中提到)时删除额外的空间之外,您的查询看起来很好

此外,最好使用JOIN(或INNER JOINLEFT JOIN 等)关键字加入您的表,这会使您的查询更加清晰易读。

【讨论】:

  • 除了限定所有列引用之外,我还将放弃旧式逗号运算符用于连接操作并将其替换为 JOIN 关键字,并将连接谓词从 WHERE子句变成ON 子句...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多