Utilização da condição WHERE dentro de um INNER JOIN

05/09/2019

0

Considerem a seguinte tabela:

coluna1 coluna2 coluna3
1 a 0
2 b 0
3 c 0
1 d 1
2 e 1
3 f 1
1 g 2
2 h 2
3 i 2


Pretendo obter este resultado:

coluna1 coluna2 coluna3 coluna1 coluna2 coluna3
1 a 0 1 d 1
2 b 0 2 e 1
3 c 0 3 f 1

A consulta que escrevi é essa:
select * from teste as a
where coluna3 = '0'

INNER JOIN (
select * from teste
where coluna3 = '1'
) as b

ON a.coluna1 = b.coluna1


Obtendo este erro:
ERROR:  syntax error at or near "INNER"
LINE 4: INNER JOIN (
        ^
SQL state: 42601
Character: 47


Tirando a condição where = '0' da primeira tabela, a consulta funciona, mas não me retorna o resultado esperado.
A pergunta é: não é possível usar a condição WHERE com INNER JOIN? Se sim, como? O que está errado nessa sintaxe?
André Carreiro

André Carreiro

Responder

Post mais votado

06/09/2019

Acredito que esse código resolva o teu problema
select *
from (select * from teste
      where coluna3 = '0') a
full outer join (select * from teste
                 where coluna3 = '1') b on (a.coluna1 = b.coluna1)

Tainan Ramos

Tainan Ramos
Responder

Mais Posts

06/09/2019

Jair N.

Não precisa ir tão longe, veja que tu colocou a cláusula "INNER.." após o WHERE da 1ª FROM... o correto seria:

select * from teste as a

INNER JOIN (
select * from teste
where coluna3 = ''1''
) as b

ON a.coluna1 = b.coluna1

where a.coluna3 = ''0''
Responder

06/09/2019

André Carreiro

Não precisa ir tão longe, veja que tu colocou a cláusula "INNER.." após o WHERE da 1ª FROM... o correto seria:

select * from teste as a

INNER JOIN (
select * from teste
where coluna3 = ''1''
) as b

ON a.coluna1 = b.coluna1

where a.coluna3 = ''0''



Obrigado! Era justamente essa regra de sintaxe que eu precisava compreender.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar