MySQL 存在于何处,mySQL 如何链接行?

发布于 2024-11-09 23:45:15 字数 286 浏览 3 评论 0原文

我在理解这段代码时遇到问题

SELECT * FROM sometable WHERE EXISTS (
   SELECT 1 FROM sometable
   GROUP BY relevant_field
   HAVING count(*) > 1) 

如果我使用 JOIN,我会显式指定链接,但在这里我没有,所以我对 MySQL 内部发生的事情没有清晰的概念。

MySQL 如何知道如何将内部某个表的行链接到外部某个表?

I'm having a problem grokking this code

SELECT * FROM sometable WHERE EXISTS (
   SELECT 1 FROM sometable
   GROUP BY relevant_field
   HAVING count(*) > 1) 

If I use a JOIN, I specify the link explicitly, but here I don't so I don't have clear concept of what's happening inside MySQL.

How does MySQL know how to link the rows from the inner sometable to the outer sometable?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一杯敬自由 2024-11-16 23:45:15

您的查询将返回 sometable 中的所有行,或者根本不返回任何行,具体取决于带括号的 SELECT 是否返回行。

换句话说,MySQL 不知道如何也不会在这个特定查询中将行从内部某个表链接到外部某个表。

相当于连接的是:

SELECT * FROM sometable a WHERE EXISTS (
   SELECT 1 FROM sometable b
   WHERE a.relevant_field = b.relevant_field
   GROUP BY b.relevant_field
   HAVING count(*) > 1) 

Your query as it is will either returns all rows from sometable or no rows at all, depending on whether the parenthesized SELECT will return rows or not.

In other words, MySQL does not know how to and will not link the rows from the inner to the outer sometable in this particular query.

The equivalent to a join would be:

SELECT * FROM sometable a WHERE EXISTS (
   SELECT 1 FROM sometable b
   WHERE a.relevant_field = b.relevant_field
   GROUP BY b.relevant_field
   HAVING count(*) > 1) 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文