几乎每个人都遇到过这个子查询错误:
left outer join
并且每个答案都建议我们在这种情况下用in
替换子查询。
在操作中支持限制子查询是一个很好的功能,因为许多子查询与.NET
运算符一起使用,但是为什么MySQL开发组决定不将它带到MySQL,是否有任何原因使得这些运算符在子查询中是否存在危险或不良的性能?
2016年11月30日,作为Mysql 8.0最新的beta草案文档,MySQL仍然不支持这种子查询。
答案 0 :(得分:1)
现在已经使用SQL(主要是Oracle和SQL Server)大约14年(主要是针对世界上最大公司的高要求环境);我强烈建议您检查一下您的工作方式 - 我从来没有需要以这种方式限制子查询的结果。
以下是我对您发送的链接中列出的每个方案的评论:
更新与子查询中相同的表 - 技术限制,某些引擎会锁定表而不是行。我确定我已经做了很多事;得爱Oracle DB: - )
我可能想到的限制子查询结果的唯一可能情况是只带一个数据样本,就像你想在日志或其他东西中带来错误计数而你只想要一个列随机样本(例如:[PROGRAM] [LOG COUNT] [ERR COUNT] [ERR EXAMPLE])...在这种非常罕见的情况下,我会理解限制子查询结果的用法,但为此您可以使用任何组通过MIN()或MAX()等函数。
无论如何,如果您发现任何您认为需要限制子查询结果的场景并且不仅仅是带来数据样本 - 请再想一想,您的逻辑可能有问题;在这里询问是否属于这种情况: - )