MySQL如果存在,MySQL如何链接行?

MySQL如果存在,MySQL如何链接行?,mysql,where,exists,Mysql,Where,Exists,我在摸索这个代码时遇到了问题 SELECT * FROM sometable WHERE EXISTS ( SELECT 1 FROM sometable GROUP BY relevant_field HAVING count(*) > 1) 如果我使用连接,我会显式地指定链接,但在这里我没有这样做,所以我不清楚MySQL内部发生了什么 MySQL如何知道如何将行从内部sometable链接到外部sometable?您的查询将返回来自sometable的所有行,或者

我在摸索这个代码时遇到了问题

SELECT * FROM sometable WHERE EXISTS (
   SELECT 1 FROM sometable
   GROUP BY relevant_field
   HAVING count(*) > 1) 
如果我使用连接,我会显式地指定链接,但在这里我没有这样做,所以我不清楚MySQL内部发生了什么


MySQL如何知道如何将行从内部sometable链接到外部sometable?

您的查询将返回来自
sometable
的所有行,或者根本不返回行,这取决于括号内的SELECT是否返回行

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

与连接等效的是:

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) 

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

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

与连接等效的是:

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) 

@ypercube,因此您可以将join条件转移到内部select中的where子句,就像隐式的
where join
?是。实际上,我的查询更像是
中的相关字段(选择相关字段…
),而不是
加入
。但是
GROUP BY
使所有3个版本产生相同的结果。@ypercube,因此您可以将join准则转移到内部select中的where子句,就像处理隐式
where join
一样?是的。实际上,我的查询更像是
中的相关字段(选择相关字段…
),而不是
加入
。但是,
groupby
使所有3个版本产生相同的结果。