Utilização da condição WHERE dentro de um INNER JOIN
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:
Obtendo este erro:
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?
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
Curtidas 0
Melhor post
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.
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''
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
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''
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