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

SQL

PostgreSQL

05/09/2019

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

Curtidas 0

Melhor post

Tainan Ramos

Tainan Ramos

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)
GOSTEI 1

Mais Respostas

Jair N.

Jair N.

05/09/2019

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''
GOSTEI 1
André Carreiro

André Carreiro

05/09/2019

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.
GOSTEI 0
POSTAR