首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么MySQL不支持“限制&IN/ALL/ANY/某些子查询”

为什么MySQL不支持“限制&IN/ALL/ANY/某些子查询”
EN

Stack Overflow用户
提问于 2016-12-01 04:22:34
回答 1查看 1.4K关注 0票数 3

几乎每个人都遇到了以下子查询错误:

代码语言:javascript
运行
复制
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery

在这种情况下,每个答案都建议我们用left outer join替换子查询。

支持使用in操作的限制子查询是一个很好的特性,因为许多子查询都与in操作符一起使用,但是为什么MySQL开发组决定不将其引入MySQL,是否有任何原因使这些操作符在子查询中受到限制?

2016年11月30日,MySQL8.0最新的测试版文档草稿,Mysql仍然不支持这种子查询。

http://dev.mysql.com/doc/refman/8.0/en/subquery-errors.html

EN

回答 1

Stack Overflow用户

发布于 2017-02-24 10:22:55

使用SQL (主要是Oracle和SQL Server)已经14年了(主要是在世界上最大的公司的高要求环境中);我强烈建议您检查您的工作方式--我从来不需要这样限制子查询的结果。

下面是我对您发送的链接中列出的每个场景的评论:

  1. 在子查询中使用“限制”:这将产生虚假的结果
  2. SELECT语句中的子查询中有多个列--我理解这在一些情况下是有用的,但在SQL语句中阅读可能会让人感到困惑,这就是我认为它不受支持的原因--我不知道有任何db引擎会允许这样做,而且有几种方法可以正确地这样做。
  3. 子查询返回多行--是的,如果您想要一个相等的值,那么它必须等于另一个值,而不是一个列表;如果您想要从列表中得到任何值,那么它是不同的,因此需要不同的语法
  4. 更新与子查询中相同的表--技术限制,一些引擎锁定表而不是行。我肯定我已经做了很多了,我很喜欢Oracle DB :-) 我可能想到的限制子查询结果的唯一可能方案是只带一个数据样本,就像您想要在日志或其他方面带来错误计数,而您只想要一个随机样本的列(例如: PROGRAMERR计数)……在这种非常罕见的情况下,我会理解限制子查询结果的用法,但为此您可以使用任何组函数,如MIN()或MAX()。 无论如何,如果您发现任何您认为需要限制子查询结果的场景,而不是仅仅带来一个数据样本--再考虑一下,您的逻辑可能有问题;在这里问一下是否是这样的:-)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40902624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档