[SQL] Junção de Tabelas

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.

Use INNER JOIN

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.

tente CROSS JOIN

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.