Array
(
)

Junção de tabelas complicada com sql

Dpinho
   - 18 jan 2006

Bem é o sequinte:
Tenho 4 tabelas sendo
OS, Itemos, Produto, Serviço
preciso fazer uma busca e imprimir os dados das tabelas em QR.
fiz desta maneira e esta dando erro.

Select * From PRODUTOS,RECEITAS,ITEMOS where RECEITAS.NUMERO = ITEMOS.OS and ITEMOS.PRODUTO = PRODUTOS.DESCRICAO AND RECEITAS.NUMERO =´+QuotedStr(Nuos.text));

Neste caso, não retornar nenhum item, se tiro SERVICO, retornar os itens de produto, mas não o serviço, preciso retornar para o campo codigo do relatório a ref_fornecedor dos produtos e serviços.
alguem poderia me ajudar a resolver esta questão?
A Ideia é localiza na tabela ITEMOS todos os produtos e retornar para o campo Codigo a REF_FORN, depois retornar os Serviços e para o campo CODIGO a REF_FORNE da tabela serviços
Desde ja agradeço qualquer ajuda.

Claudio Pinho


Dpinho
   - 23 jan 2006

Amigos, preciso disto com urgencia, me ajudem


Tnaires
   - 23 jan 2006

Olá
Eu não consegui entender mto bem o q vc quer.

´não retornar nenhum item, se tiro SERVICO, retornar os itens de produto, mas não o serviço, preciso retornar para o campo codigo do relatório a ref_fornecedor dos produtos e serviços. ´

Seja mais claro.
E, se possível, coloque aqui as estruturas da tabela.

Abraços


Tnaires
   - 23 jan 2006

Bom, pelo pouco q eu entendi, talvez uma UNION resolva seu problema.

(Consulta que retorna os fornecedores da tabela ITEMOS)
UNION
(Consulta que retorna os fornecedores da tabela SERVICOS)

Abraços


Dpinho
   - 23 jan 2006


Citação:
Bom, pelo pouco q eu entendi, talvez uma UNION resolva seu problema.

(Consulta que retorna os fornecedores da tabela ITEMOS)
UNION
(Consulta que retorna os fornecedores da tabela SERVICOS)

Abraços


poderia me dar um exemplo???


Tnaires
   - 23 jan 2006

Fica difícil dar um exemplo sem vc explicar as estruturas das tabelas que vc usa. Detalhe mais a estrutura do banco.


Dpinho
   - 23 jan 2006


Citação:
Fica difícil dar um exemplo sem vc explicar as estruturas das tabelas que vc usa. Detalhe mais a estrutura do banco.


Tabelas Vendas
Numero, Valortotal


Tabela Itemvendas
Ref_Produto
Descrição
Valor unitario
Quantidade

Sendo que nesta tabela tambem gravo tanto produtos como serviços

Tabela Serviços
Ref_Serviço
Descrição
Valor

Tabela produtos
codigo
Ref_Forn
Descrição
Valor

O meu relatorio esta imprimindo o Cabeçalho da OS, mas quando tenho que imprimir os itens, preciso localizar na tabela de Items todos os produtos e tambem todos os serviços, como gravo na tabela somente a descrição do produto tenho que localizar na tabela produtos e retornar a ref_forn, depois tenho que localizar os serviços na tabela de serviços e retonar o codigo do serviço tambem buscando pelo campo produto da tabela de itens.
bem se não incluo somente os produtos fica tudo bem, so não sai a REf_Forn, mas se tentar colocar os serviços não retornar nada, nem mesmo os produtos.
agradeço qualquer ajuda


Tnaires
   - 23 jan 2006

OK.
Pelo que eu entendi:

- vc grava produtos e serviços em ItensVendas;
- a relação entre itens e produtos é ItensVendas.Descricao e Produtos.Descricao;
- a relação entre itens e serviços é ItensVendas.Ref_Produto e Servicos.Ref_Servico.

Se Ref_Forn e Ref_Servico forem do mesmo tipo de dados, uma operação UNION pode ser efetuada da seguinte forma:
#Código

SELECT P.Ref_Forn FROM Produtos P
INNER JOIN ItensVendas I ON
(I.Descricao = P.Descricao)
UNION
SELECT S.Ref_Servico FROM Servicos S
INNER JOIN ItensVendas I ON
(I.Ref_Produto = S.Ref_Servico)

Essa consulta retorna todos os fornecedores dos produtos e acrescenta ao resultado todos os serviços.
Cada campo adicional deve ser colocado nas duas consultas, e devem ser do mesmo tipo de dados.
Esta resposta foi baseada no q eu entendi do seu problema. Se eu entendi errado, por favor me desculpe.
Abraços


Dpinho
   - 23 jan 2006

- a relação entre itens e serviços é ItensVendas.Ref_Produto e Servicos.Ref_Servico.


a relação entre itens e serviços é ItensVendas.descrição e Servicos.descriçao

Obrigado pela sua ajuda ate aqui


Tnaires
   - 24 jan 2006

Ah, blz.
Então é só mudar a última linha.
#Código

SELECT P.Ref_Forn FROM Produtos P
INNER JOIN ItensVendas I ON
(I.Descricao = P.Descricao)
UNION
SELECT S.Ref_Servico FROM Servicos S
INNER JOIN ItensVendas I ON
(I.Descricao = S.Descricao) -- essa linha mudou

Teste a consulta e fale pra nós se era o q vc queria.
Abraços.