Como usar o mysql JOIN sem a condição ON?


106

É possível escrever uma consulta de junção sem ONdeclaração? e como essas junções diferem LEFT JOIN, RIGHT JOINfunciona.


1
Como a ONcláusula informa ao servidor como as tabelas estão relacionadas, não. Se todos os seus diferentes tipos de junção derem o mesmo resultado, você está fazendo isso errado de alguma forma, e adicionar algum código pode nos ajudar a identificar seu problema. Enquanto isso, acesse o blog de Jeff Atwood para uma introdução de 2 minutos sobre os diferentes tipos de junção.
fvu

Respostas:


153

A documentação do MySQL cobre este tópico.

Aqui está uma sinopse. Ao usar joinou inner join, a oncondição é opcional. Isso é diferente do padrão ANSI e de quase qualquer outro banco de dados. O efeito é a cross join. Da mesma forma, você pode usar uma oncláusula com cross join, que também difere do SQL padrão.

Uma junção cruzada cria um produto cartesiano - ou seja, cada combinação possível de 1 linha da primeira tabela e 1 linha da segunda. A junção cruzada para uma tabela com três linhas ('a', 'b' e 'c') e uma tabela com quatro linhas (digamos 1, 2, 3, 4) teria 12 linhas.

Na prática, se você quiser fazer uma junção cruzada, use cross join:

from A cross join B

é muito melhor do que:

from A, B

e:

from A join B -- with no on clause

A oncláusula é necessária para uma junção externa direita ou esquerda, portanto, a discussão não é relevante para eles.

Se você precisa entender os diferentes tipos de junções, precisa estudar alguns bancos de dados relacionais. Stackoverflow não é um lugar apropriado para esse nível de discussão.


1
Nunca ouvi falar de junção cruzada ou precisava de uma ... até hoje!
goneos

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.