MySQL где существует, как mySQL связывает строки? - PullRequest
1 голос
/ 26 мая 2011

У меня проблема с взломом этого кода

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

Если я использую JOIN, я указываю ссылку явно, но здесь я не делаю, поэтому у меня нет четкого представления о том, что происходит внутри MySQL.

Как MySQL знает, как связать строки из внутреннего sometable с внешним sometable?

1 Ответ

1 голос
/ 26 мая 2011

Ваш запрос в том виде, в каком он есть, будет возвращать все строки из 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) 
...