full join
aew pessoal, to com problemas pra criar uma sql.
tenho duas tabelas.
tabela 1
codigo
1
2
tabela 2
codigo
1
3
queria que retornasse
1 - 1
2 - nulo
nulo - 3
falows!
tenho duas tabelas.
tabela 1
codigo
1
2
tabela 2
codigo
1
3
queria que retornasse
1 - 1
2 - nulo
nulo - 3
falows!
Djorius
Curtidas 0
Respostas
Rjun
23/09/2005
SELECT Tabela1.Codigo, Tabela2.Codigo FROM Tabela1 FULL JOIN Tabela2 ON Tabela2.Codigo = Tabela1.Codigo
GOSTEI 0
Djorius
23/09/2005
era isso mesmo que eu queria, mas no meu caso não funcionou perfeitamente porque na verdade a estrutura das tabelas é mais complicada. explico. o usuário deu entrada em um pedido de compras. digita um monte de produtos e grava no bd. na entrada de notas fiscais o usuário pode ´linkar´ essa nota a um pedido de compra. e eu estou tentando fazer agora um relatório no qual o usuário verifica se o q entrou na nota era o q estava sendo pedido ou entrou mais, ou entrou menos. a estrutura certa das tabelas é a seguinte:
PEDIDO_MESTRE(
CODIGO_PEDIDO,
TIPO,
DATA,
ETC.
)
PEDIDO_DETALHE(
AUTO,
CODIGO_PEDIDO,
CODIGO_PRODUTO
)
NOTA_MESTRE(
CODIGO_NOTA,
CODIGO_PEDIDO,
DATA
)
NOTA_DETALHE(
AUTO,
CODIGO_NOTA,
CODIGO_PRODUTO
)
Os dados das tabelas:
PEDIDO_MESTRE
CODIGO_PEDIDO | TIPO
1 | 1 <- na hora de escolher o relatório o usuário pode escolher pedidos do tipo 1 ao 3. eu quero que ele tenha que escolher um tipo de cada vez.
PEDIDO_DETALHE
CODIGO_PEDIDO | CODIGO_PRODUTO
1 | PRODUTO1
1 | PRODUTO2
NOTA_MESTRE
CODIGO_NOTA | CODIGO_PEDIDO
123 | 1 <- aqui diz que essa nota está ligada ao pedido 1
NOTA_DETALHE
CODIGO_NOTA | CODIGO_PRODUTO
123 | PRODUTO1
123 | PRODUTO3
O que eu queria retornar:
CODIGO_PEDIDO | PRODUTO_NOTA | PRODUTO_PEDIDO
1 | PRODUTO1 | PRODUTO1
1 | NULL | PRODUTO2
1 | PRODUTO3 | NULL
A sql que eu estou rodando:
SELECT
T1.CODIGO_PEDIDO,
T4.CODIGO_PRODUTO AS PRODUTO_NOTA,
T2.CODIGO_PRODUTO AS PRODUTO_PEDIDO
FROM
PEDIDO_MESTRE T1
JOIN
PEDIDO_DETALHE T2 ON T1.CODIGO_PEDIDO=T2.CODIGO_PEDIDO
JOIN
NOTA_MESTRE T3 ON T3.CODIGO_PEDIDO=T1.CODIGO_PEDIDO
FULL JOIN
NOTA_DETALHE T4 ON T2.CODIGO_PRODUTO=T4.CODIGO_PRODUTO
WHERE
T1.TIPO=1 AND T1.DATA=´09/23/2005´
O problema:
O problema todo está na cláusula where da consulta. Eu estou coloquei condições específicas para a tabela ´PEDIDO_MESTRE T1´, logo os produtos que vieram na nota, mas não estavam no pedido não aparecem.
O que fazer então? Já pensei em trocar o where por:
(T1.TIPO=1 AND T1.DATA=´09/23/2005´) OR (T1.TIPO IS NULL AND ???)
Quando o tipo fosse null significaria que era um produto que estava na nota, mas que não tinha no pedido. mas teria que colocar isso com mais alguma coisa (´???´ no texto) porque se eu botar simplesmente (T1.TIPO IS NULL) ele vai misturar os produtos desse pedido com o de outros.
alguém tem alguma idéia?
PEDIDO_MESTRE(
CODIGO_PEDIDO,
TIPO,
DATA,
ETC.
)
PEDIDO_DETALHE(
AUTO,
CODIGO_PEDIDO,
CODIGO_PRODUTO
)
NOTA_MESTRE(
CODIGO_NOTA,
CODIGO_PEDIDO,
DATA
)
NOTA_DETALHE(
AUTO,
CODIGO_NOTA,
CODIGO_PRODUTO
)
Os dados das tabelas:
PEDIDO_MESTRE
CODIGO_PEDIDO | TIPO
1 | 1 <- na hora de escolher o relatório o usuário pode escolher pedidos do tipo 1 ao 3. eu quero que ele tenha que escolher um tipo de cada vez.
PEDIDO_DETALHE
CODIGO_PEDIDO | CODIGO_PRODUTO
1 | PRODUTO1
1 | PRODUTO2
NOTA_MESTRE
CODIGO_NOTA | CODIGO_PEDIDO
123 | 1 <- aqui diz que essa nota está ligada ao pedido 1
NOTA_DETALHE
CODIGO_NOTA | CODIGO_PRODUTO
123 | PRODUTO1
123 | PRODUTO3
O que eu queria retornar:
CODIGO_PEDIDO | PRODUTO_NOTA | PRODUTO_PEDIDO
1 | PRODUTO1 | PRODUTO1
1 | NULL | PRODUTO2
1 | PRODUTO3 | NULL
A sql que eu estou rodando:
SELECT
T1.CODIGO_PEDIDO,
T4.CODIGO_PRODUTO AS PRODUTO_NOTA,
T2.CODIGO_PRODUTO AS PRODUTO_PEDIDO
FROM
PEDIDO_MESTRE T1
JOIN
PEDIDO_DETALHE T2 ON T1.CODIGO_PEDIDO=T2.CODIGO_PEDIDO
JOIN
NOTA_MESTRE T3 ON T3.CODIGO_PEDIDO=T1.CODIGO_PEDIDO
FULL JOIN
NOTA_DETALHE T4 ON T2.CODIGO_PRODUTO=T4.CODIGO_PRODUTO
WHERE
T1.TIPO=1 AND T1.DATA=´09/23/2005´
O problema:
O problema todo está na cláusula where da consulta. Eu estou coloquei condições específicas para a tabela ´PEDIDO_MESTRE T1´, logo os produtos que vieram na nota, mas não estavam no pedido não aparecem.
O que fazer então? Já pensei em trocar o where por:
(T1.TIPO=1 AND T1.DATA=´09/23/2005´) OR (T1.TIPO IS NULL AND ???)
Quando o tipo fosse null significaria que era um produto que estava na nota, mas que não tinha no pedido. mas teria que colocar isso com mais alguma coisa (´???´ no texto) porque se eu botar simplesmente (T1.TIPO IS NULL) ele vai misturar os produtos desse pedido com o de outros.
alguém tem alguma idéia?
GOSTEI 0