MySQL Workbench 返回“OK”而不是返回行
Posted
技术标签:
【中文标题】MySQL Workbench 返回“OK”而不是返回行【英文标题】:MySQLWorkbench returns 'OK' instead of returning rows 【发布时间】:2020-10-21 12:43:38 【问题描述】:好的,我正在尝试生成“在 SC 和 SPR 中流行的托儿中心的前 5 名名称”,我在 mysqlWorkbench 输出中得到了“OK”而不是“xxx 行返回”。你们中的任何人都可以检查我的查询是否正确吗?
mySQLWorkbench 版本为 8.0.18
SELECT centre_service.centre_name
FROM centre_service
WHERE centre_service.centre_code = centre.centre_code AND (type_of_citizenship = "SC" OR type_of_citizenship = "SPR") AND centre_name = (
SELECT centre.centre_name
FROM centre
GROUP BY centre_name LIMIT 5
);
【问题讨论】:
centre
未定义,因此查询甚至不是“OK”。
“中心甚至没有定义”是什么意思?
。 .更具体地说,WHERE
子句中的 centre.centre_code
没有定义。
也就是说,你不能在外部查询中引用centre
的列。你应该得到Error Code: 1054. Unknown column 'centre.centre_code' in 'where clause'
另一个问题:当子查询不是标量子查询时比较centre_name = (...subquery...)
。如果您使用=
,那么您必须确保子查询只返回一行。所以这整个查询由于多种原因是无效的,它不可能成功执行。
【参考方案1】:
试试这个查询。您有 2 个错误:在外部范围内使用子查询中的表引用(替换为内部范围)和对多个值使用比较运算符(更改为 IN
)。
SELECT centre_service.centre_name
FROM centre_service
LEFT JOIN (
SELECT centre_name
FROM centre
GROUP BY centre_name LIMIT 5
) centre ON centre.centre_name = centre_service.centre_name
WHERE
(type_of_citizenship = "SC" OR type_of_citizenship = "SPR") AND
centre_service.centre_code = centre.centre_code;
【讨论】:
您好,非常感谢您的参与。但我得到一个错误代码 1235,指出“这个版本的 MySQL 还不支持“LIMIT & IN/ALL/ANY/SOME 子查询”.. 请编辑您的问题并指定您的 MYSQL 版本。 对不起,我对堆栈溢出很陌生..如何编辑我的问题? 您的问题标签下方有链接edit
。无论如何我修改了我的答案,因为以前是不正确的。我认为它和你的一样。
我明白了,找到了,谢谢。我正在使用版本 8.0.18..【参考方案2】:
这个答案不解决查询中的错误,但有助于回答为什么既没有看到错误也没有看到数据行以及可以做些什么的问题。
MySQL Workbench 不能很好地处理所有类型的查询错误。有时它只是返回没有行的“OK”。例如,我已经看到了非法混合排序错误。
发生这种情况时,只需在查询选项卡中发出此命令:
show errors;
这将返回一个或多个错误,每个错误都有一个级别、一个代码和一条消息。例如,我的查询(细节不重要)返回“OK”,仅此而已。然后show errors
给了我这个:
Level | Code | Message |
---|---|---|
Error | 1267 | Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '=' |
我不能肯定地说,但似乎 [一些?] 运行时错误更容易出现这个问题,而不是立即发现的语法错误。
【讨论】:
以上是关于MySQL Workbench 返回“OK”而不是返回行的主要内容,如果未能解决你的问题,请参考以下文章