Olá!
Tenho três tabelas, por exemplo:
tb1:
cod | azul
053 | 1
054 | 1
055 | 1
tb2:
cod | verde
053 | 1
444 | 1
999 | 1
tb3:
cod | roxo
053 | 1
444 | 1
111 | 1
Como fazer para UNIR as 3 em uma só usando cod, criando uma coluna para cada e somando as:
cod | azul | verde | roxo
053 | 1 | 1 | 1
054 | 1 | |
055 | 1 | |
444 | | 1 | 1
999 | | 1 |
111 | | | 1
Ao fazer um FULL JOIN a coluna “cod” fica em branco nas tabelas que estão a direita:
cod | azul | verde | roxo
053 | 1 | 1 | 1
054 | 1 | |
055 | 1 | |
| | 1 | 1
| | 1 |
| | | 1
Como resolver isso? Estou usando o Postgresql.
Obrigado.
hum… não funcionou… agora não apareceu nada:
SELECT
tb1ok.cod_prod,
tb1ok.status as ok,
tb2nok.status as nok,
tb3def.defeitos
FROM
tb1ok
INNER JOIN tb2nok USING (cod_prod)
INNER JOIN tb3def USING (cod_prod)
da uma olhada
[url]http://javaaberto.blogspot.com.br/2012/10/sql-cross-inner-left-right-e-full-outer.html[/url]
da uma olhada
http://javaaberto.blogspot.com.br/2012/10/sql-cross-inner-left-right-e-full-outer.html
O que acontece é que as tabelas não possuem os mesmos registros…
Só vai aparecer os registros q tem semelhantes relacionados pela chave.
o que tentei fazer agora foi uma tabela com todos os registros “chave” que tem nas duas tabela… e fazer um LEFT :
SELECT
ass.cod_prod,
tb1ok.status as ok,
tb2nok.status as nok
tb3def.defeitos
FROM
-- lista com todos os produtos:
( select tb0.cod_prod from tb0 group by tb0.cod_prod ) ass
left JOIN tb1ok using(cod_prod)
left JOIN tb2nok using(cod_prod)
left JOIN tb3def using(cod_prod)
Funcionou, mas o desempenho piorou em alguns milisegundos.
Obrigado.
Pior q não adiantou…
Alguns registros ficaram de Fora…
Os registros que não possuem correspondência na outra tabela… registros “sozinhos” que estão na terceira tabela não apareceram.
A unica solução que vejo até agora é fazer uma outra consulta só com os que não existem e fazer uma união = UNION.
No cross join… a primeira coluna desaparece… pois coloco o “alias” da tabela :
SELECT
ass.cod_prod, —<<<< sáo vai aparecer os que tiverem nesta tabela
tb1ok.status as ok,
tb2nok.status as nok
tb3def.defeitos
…
Aí eu coloco o asterisco *
e não forma as colunas certinhas, as tabelas se repetem nas colunas:
cod_prod | status | cod_prod | status | cod_prod | status
…53…1…45…1…55…1…
Me parece que apenas com uma junção de alguns cursores e uma stored procedure é que será possível fazer isso.