Resultado do Select se repete 9 vezes !

Firebird

08/04/2007

Ola, para trabalhar com um sistema de serviços resolvi criar tabelas para que o usuario nao erre o valor do servico, entao eu criei as seguintes tabelas:

CREATE TABLE TAB_SERVICOS (
ID_SERVICOS
SER_DESCRICAO
SER_ID_NIVEL
SER_VALOR
);

CREATE TABLE TAB_MOT_MODELO (
ID_MOT_MODELO ,
MOT_MO_ID_MOTOR_MARCA ,
MOT_MO_ID_NIVEL ,
MOT_MO_MODELO ,
MOT_MO_MARCA_MODELO ,
MOT_MO_APLICACAO
);


CREATE TABLE TAB_OS (
ID_OS ,
OS_ID_MOT_MODELO ,
OS_ID_FORMA_DE_PAG ,
OS_ID_FUNCIONARIO ,
OS_DATA_ABERTURA ,
OS_DATA_FECHAMENTO
. . .
);

CREATE TABLE TAB_OS_SERVICO_I (
ID_OS_SERVICO_I ,
OS_SER_I_ID_OS ,
OS_SER_I_ID_SERVICOS ,
OS_SER_I_QUANTIDADE ,
OS_SER_I_VALOR_UNI ,
OS_SER_I_VALOR_TOTAL ,
OS_SER_I_PRONTO
);

Para preencher a tabela de Itens Serviço (TAB_OS_SERVICO_I), coloqui um DBGrid ligado na tabela de Serviços (TAB_SERVICOS), e para preencher o DBGrid fiz a seguite select:

select * from tab_servicos S inner join tab_mot_modelo M on M.mot_mo_id_nivel = S.ser_id_nivel inner join tab_os O on ´´´+IntToStr(Modulo.setOSOS_ID_MOT_MODELO.Value)+´´´ = M.id_mot_modelo

sendo que:
´´´+IntToStr(Modulo.setOSOS_ID_MOT_MODELO.Value)+´´´
= OS_ID_MOT_MODELO

A duvida é no select, o resultado do select me retorna no DBGrid os valores corretos, porem se repetem, isso mesmo, o resultado se repete no dbgrid 9 vezes.

Como faço para que o resultado do select nao se repita?

Obrigado pela atenção.


Ullrich

Ullrich

Curtidas 0

Respostas

Acacio

Acacio

08/04/2007

Não vi direitoo sql mas alguns pontos que podem ser arrumados.
1. Pegar somente os campos que te interessam em vez de ´*´ todos
2. se mesmo assim estiver trazendo registro duplicados use a função
distinct que provavelemnte resolverá o teu problema.


GOSTEI 0
Ullrich

Ullrich

08/04/2007

Usei o comando DISTINCT, o resultado mudou, porem ainda nao esta o
que eu esperava.

Vou mostrar aqui os resultados para que vc possa analizar:

1) Caso.
Select * from tab_servicos S inner join tab_mot_modelo M on
M.mot_mo_id_nivel = S.ser_id_nivel inner join tab_os O on ´10´ =
M.id_mot_modelo

Resultado da pesquisa.
Cod Descrição
2 VI RETIFICA
11 VI DESIMPENAR
26 BL BRUNIR
2 VI RETIFICA
11 VI DESIMPENAR
26 BL BRUNIR
2 VI RETIFICA
11 VI DESIMPENAR
26 BL BRUNIR
...
Veja que os resultados se repetem.

2) Caso, usando o comando DISTINCT.
select distinct * from tab_servicos S inner join tab_mot_modelo M on
M.mot_mo_id_nivel = S.ser_id_nivel inner join tab_os O on ´10´ =
M.id_mot_modelo

Cod Descrição
2 VI RETIFICA
2 VI RETIFICA
2 VI RETIFICA
11 VI DESIMPENAR
11 VI DESIMPENAR
11 VI DESIMPENAR
26 BL BRUNIR
26 BL BRUNIR
26 BL BRUNIR
...
Usando o comando distinct o resultado ainda se repete, porem esta
ordenado.

Pode me dar mais alguma dica para arrumar este select !

OBS: Estou executando os select dentro do IBExpert.

Obrigado pela sua atenção.


GOSTEI 0
Acacio

Acacio

08/04/2007

Não uses ´select distinct * from tab_servicos´

e sim
select distinct campo1,campo2,campo3,campo4 from tab_servicos
O distinct vai funcionar se todos os campos mostrados forem iguais nos diversos registros , mas se apenas um deles tiver um campo que é diferentee ele tras 2 ou mais registro.

Ex. codigo nome cidade
1 1 Blumenau
1 1 Indaial
1 1 Brusque

Note que o código e o nome são iguais mas a cidade é diferente então ele
trará 3 registros mesmo com o distinct. Já se tirar a cidade ele trará somente 1.


GOSTEI 0
Ullrich

Ullrich

08/04/2007

Valeu mesmo Acacio dessa forma resolvi o problema com o Select.

Brigadão!

´select distinct ser_descricao, ser_valor,ID_Servicos from tab_servicos S inner join tab_mot_modelo M on M.mot_mo_id_nivel = S.ser_id_nivel inner join tab_os O on ´´´+IntToStr(Modulo.setOSOS_ID_MOT_MODELO.Value)+´´´ = M.id_mot_modelo´


GOSTEI 0
POSTAR