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个版本产生相同的结果。