Fórum Comparar 2 Selects #373785

19/08/2009

0

Fala Galeraa, tenho uma duvida que está me atormentando aqui, vamos ver se vcs conseguem me ajudar.


eu tenho duas tabelas T_controle e a T_treinamento.

essa tabela T_controle controla as notas de alguns testes que os usuarios fazem no sistema e a Tabela T_Treinamento é minha tabela onde contem todos os treinamentos para os usuario.


Eu preciso fazer com que mostre os treinamentos que os usuario ainda não fizereram, então na minha t_controle é cadastrado o ID, COD_treinamento, e a sua NOTA.

eu faço um select na minha t_treinamento mostrando os treinamentos que o usuario tem que fazer atraves do setor

SELECT 1

select cod_treinamento, treinamento, setor_treinamento from t_treinamento where setor_treinamento = ´TI´

ai esse select me mostra todos os treinamentos que o usuario precisa fazer.

ai eu tenho um outro select que me mostra os treinamentos que o usuario já fez

SELECT 2

select t_controle.status, t_usuario.id, t_controle.cod_treinamento, t_treinamento.treinamento, t_treinamento.setor_treinamento
from t_treinamento, t_controle , t_usuario where t_controle.cod_treinamento = t_treinamento.cod_treinamento
and t_controle.id_usuario = t_usuario.id
and id_usuario = ´1´


Eu queria comparar os dois selects e me mostrasse todos os treinamentos que o usuario ainda não fez tipo o resultado do SELECT 1 tudo que for diferente do SELECT 2 ele me mostra

Será que tem como ??

eu estou usando Firebird 2.0 e Delphi 07


Cleiflavio

Cleiflavio

Responder

Post mais votado

19/08/2009

CAraaa deu certo era isso que eu precisava mesmo.


Select cod_treinamento, treinamento, setor_treinamento from t_treinamento
where cod_treinamento not in (select cod_treinamento from t_controle where id_usuario = ´4´ )
and t_treinamento.setor_treinamento = ´TI´

Acertei o select assim e trouxe certinho oq eu precisava.

Valeuuu me ajudou pakasssss


Obrigado


Cleiflavio

Cleiflavio
Responder

Gostei + 1

Mais Posts

19/08/2009

Facc

Como vc sabe se o usuário fez ou não o curso?


Responder

Gostei + 0

19/08/2009

Cleiflavio

Com eu falei a T_controle vai controlar as notas do usuario.

T_controle : controle, id_usuario, cod_treinamento, nota, data_treinamento e status .

Se eu tiver um usuario cadastrado na t_controle com a nota 10 do treinamento 2 quer dizer que ele já fez o treinamento 2 ,

Entendeu ?

Desse jeito vou saber se o usuario já fez o treinamento ou não.


Responder

Gostei + 0

19/08/2009

Cleiflavio

Com eu falei a T_controle vai controlar as notas do usuario.

T_controle : controle, id_usuario, cod_treinamento, nota, data_treinamento e status .

Se eu tiver um usuario cadastrado na t_controle com a nota 10 do treinamento 2 quer dizer que ele já fez o treinamento 2 ,

Entendeu ?

Desse jeito vou saber se o usuario já fez o treinamento ou não.


Responder

Gostei + 0

19/08/2009

Facc

Tenta algo semelhante

Select cod_treinamento, treinamento, setor_treinamento from t_treinamento
where cod_treinamento not in (select cod_treinamento from t_controle where id_usuario = :piduser)



Responder

Gostei + 0

11/09/2014

Marcos Roberto

Olá pessoal!!

Eu uso o firebird 2.5 e estou com precisando fazer uma pesquisa mais ou mesmo parececida com a dica a cima, porem quando executo a select ele trava, e quando retorna o resultado fica muito lento navegar pelos registros. Já tentei fazer pelo delphi, pelo IBexpert e flamerobin, e o comportamento é mesmo!!

Segue a select:

select COD, RI, NOME FROM SOC_SOCIOS where COD in (Select SOCIO_COD_ID FROM SOC_SOCIOS_IDENTIF where IDENTIFICADOR = '3')


Agradeço.
Responder

Gostei + 0

11/09/2014

Marcos P

Marcos,

Quantos registros em cada tabela ?

Quantos registros devem ser selecionados pela query acima ?

Qual estrutura de chave primária em cada tabela ?

Qual a estrutura de índices em cada tabela ?

A consulta é lenta também quando realizada diretamente no servidor ?

Você tentou alterar o esquema acima para INNER JOIN ? Houve alteração de performance ?
Responder

Gostei + 0

11/09/2014

Marcos Roberto

Olá Marcos.

a tabela SOCIO_COD_ID tem 77426 registros, e a SOC_SOCIOS tem 13751.

a tabela SOCIO_COD_ID contem 4841 registro com IDENTIFICADOR igual a 3, agora quantos registro deve me trazer da tabela SOC_SOCIOS eu não sei te dizer.

minhas tabelas não tem chaves primarias nem índices! Dá algum problema não ter???

Sim fica lento no servidor.

Eu não sei fazer com INNER JOIN , poderia me ajudar??


Agradeço viu Marcos!!!
Responder

Gostei + 0

11/09/2014

Marcos P

Assumindo que a ligação entre as tabelas ocorre entre as colunas ( SOC_SOCIOS.COD = SOC_SOCIOS_IDENTIF.SOCIO_COD_ID ), faça :

SELECT SOC.COD, SOC.RI, SOC.NOME
FROM SOC_SOCIOS SOC INNER JOIN SOC_SOCIOS_IDENTIF IDE ON ( SOC.COD = IDE.SOCIO_COD_ID)
WHERE IDE.IDENTIFICADOR = '3'

Se as chaves não forem essas, ajuste-as na clausula "ON" do "INNER JOIN".

Provavelmente, se ocorrer alguma diferença de performance, será mínima...

Procure criar as chaves primárias corretas nas tabelas... isso irá melhorar sua pesquisa !

Senão ficar 100%, crie um índice auxiliar na tabela SOC_SOCIOS_IDENTIF com a chave de ligação com SOC_SOCIOS.

Sem uma correta estrutura de chaves primárias e índices é impossível garantir performance nesse tipo de consulta...
Responder

Gostei + 0

11/09/2014

Marcos Roberto

uoouuuuu!!!

deu certo Marcos, cara muito obrigado!!


Aproveitando a oportunidade, você disse se não ficar 100% pra eu criar um índice auxiliar nas tabelas. Como eu faria isso??


Mais uma vez obrigadão pela ajuda.
Responder

Gostei + 0

12/09/2014

Marcos P

Se você criou as chaves primárias e elas contém, em cada tabela, apenas os campos de ligação no relacionamento... um índice secundário é desnecessário, pois a própria chave-primária faz essa função.

Se suas chaves primárias incluem outras colunas, o índice secundário pode ajudar !

"Índices" é um assunto bem complexo e extenso... dê uma pesquisada aqui mesmo no DevMedia ou na WEB !

Alguns links que podem lhe ajudar :

> https://www.devmedia.com.br/curso-online-firebird-cap-8-criando-indices-com-ibexpert/4861
> http://www.youtube.com/watch?v=wOMj3kacTFI
> http://www.delphibr.com.br/artigos/art-ahr1.htm

T+
Responder

Gostei + 0

15/09/2014

Marcos Roberto

Olá Marcos!

obrigado por me indicador alguns materiais.
Eu criei a chave estrangeira e a select que estava com lentidão foi beleza agora!


Aprendi muito com vc , mais uma vez obrigado!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar