CONSULTA SQL AVANCADA
Pessoal estou com dificuldade pra gerar uma consulta sql no access ja fiz de tudo, left join, right, not exists, left outer e etc e nao estou conseguindo gerar essa consulta, creio que seja uma limitacao do access pois ele nao da suporte a MINUS e INTERSECT mas creio que talvez alguem saiba fazer isso por um outro caminho que nao conheco. Veja a imagem no link abaixo la explica o que preciso. abracos.
http://img465.imageshack.us/img465/7283/imagemml9.jpg
http://img465.imageshack.us/img465/7283/imagemml9.jpg
Tenta utilizar subquery:
SELECT * FROM cursos_prereq_concluido WHERE login = 01158410 AND habilitado NOT IN (SELECT habilitado FROM cursos_prereq_nconcluido WHERE login = 01158410)
Obviamente caso de certo teriamos que parametrizar login.
Qualquer duvida postae.
SELECT * FROM cursos_prereq_concluido WHERE login = 01158410 AND habilitado NOT IN (SELECT habilitado FROM cursos_prereq_nconcluido WHERE login = 01158410)
Obviamente caso de certo teriamos que parametrizar login.
Qualquer duvida postae.
Sobre a citacao para migracao para sql server isso nao posso fazser heheheh pois estou programando o access em uma grande empresa, aqui tem varios servidores com sql server mas pra esse projeto tem q ser o access msm.
Citação:EVEREST escreveu:
Sobre a citacao para migracao para sql server isso nao posso fazser heheheh pois estou programando o access em uma grande empresa, aqui tem varios servidores com sql server mas pra esse projeto tem q ser o access msm.
Seu chefe pode até obrigar a utilizar esta tecnologia, mas em Sistema Multi-User e/ou em Rede BD de arquivos como o Access, Dbase, etc, não são indicadas por falta de desempenho e principalmente segurança.
Mas o que eu não entendi é se funcionou ou não a consulta descrita por mim; creio que nao afinal o tópico está aberto.
Senão, qual foi o erro ?
Fiz assim, segue a tabela com o modelo.
SELECT Cursos_prepreq_concluido.aluno, Cursos_prepreq_concluido.login,Cursos_prepreq_concluido.habilitado,Cursos_prepreq_concluido.avaliacao
FROM Cursos_prepreq_concluido
WHERE NOT EXISTS(SELECT * FROM Cursos_prereq_nconcluido WHERE Cursos_prepreq_concluido.aluno = Cursos_prereq_nconcluido.aluno AND Cursos_prepreq_concluido.habilitado = Cursos_prereq_nconcluido.habilitado)
Segue um modelinho.
SELECT Cursos_prepreq_concluido.aluno, Cursos_prepreq_concluido.login,Cursos_prepreq_concluido.habilitado,Cursos_prepreq_concluido.avaliacao
FROM Cursos_prepreq_concluido
WHERE NOT EXISTS(SELECT * FROM Cursos_prereq_nconcluido WHERE Cursos_prepreq_concluido.aluno = Cursos_prereq_nconcluido.aluno AND Cursos_prepreq_concluido.habilitado = Cursos_prereq_nconcluido.habilitado)
Segue um modelinho.
As duas consultas falharam mas eu ja descobri o erro.
SELECT *
FROM CURSOS_PREREQ_CONCLUIDO
WHERE LOGIN = Formulários![fm_habilitados_para_cursos]![txt_login] AND HABILITADO NOT IN (SELECT HABILITADO FROM CURSOS_PREREQ_CONCLUIDO WHERE HABILITADO IN(SELECT HABILITADO FROM CURSOS_PREREQ_NCONCLUIDO WHERE LOGIN = Formulários![fm_habilitados_para_cursos]![txt_login]) AND LOGIN = Formulários![fm_habilitados_para_cursos]![txt_login]);
essa funcionou, o problema e que o access nao suporta o operador minus, COMO ABAIXO:
SELECT * FROM cursos_prereq_concluido WHERE login = 01158410 AND habilitado MINUS (SELECT * FROM cursos_prereq_nconcluido WHERE login = 01158410)
SELECT *
FROM CURSOS_PREREQ_CONCLUIDO
WHERE LOGIN = Formulários![fm_habilitados_para_cursos]![txt_login] AND HABILITADO NOT IN (SELECT HABILITADO FROM CURSOS_PREREQ_CONCLUIDO WHERE HABILITADO IN(SELECT HABILITADO FROM CURSOS_PREREQ_NCONCLUIDO WHERE LOGIN = Formulários![fm_habilitados_para_cursos]![txt_login]) AND LOGIN = Formulários![fm_habilitados_para_cursos]![txt_login]);
essa funcionou, o problema e que o access nao suporta o operador minus, COMO ABAIXO:
SELECT * FROM cursos_prereq_concluido WHERE login = 01158410 AND habilitado MINUS (SELECT * FROM cursos_prereq_nconcluido WHERE login = 01158410)
Ok, realmente eu utilizei um exemplo baseado em SQL Server. Vc poderia especificar o erro que ocorreu com o NOT IN ?
E que tal descomplicar?
Basta usar duas consultas e comparar uma àoutra.
Não testei, mas penso que funcionará. Qualquer dúvida sabe onde me encontrar :)
Basta usar duas consultas e comparar uma àoutra.
rs1.open "select * from CURSOS_PREREQ_CONCLUIDO Where Login = xxxx"
rs2.open "select * from CURSOS_PREREQ_NCONCLUIDO Where Login = xxx"
Dim iguais as Boolean
while not rs1.eof
iguais=false
while not rs2.eof
if rs1!habilitado = rs2!habilitado then
iguais=true
end if
rs2.movenext
wend
if iguais=false then
resultado=rs1!habilitado
end if
rs1.movenext
wend
Não testei, mas penso que funcionará. Qualquer dúvida sabe onde me encontrar :)
Amigão, da uma olhada direitinho no meu exemplo por que este comando abaixo funcionou perfeitamente:
SELECT * FROM cliente WHERE id_cliente NOT IN (SELECT id_cliente FROM pedido)
Trouxe todos cliente cadastrados que não fizeram pedido
(Todos Cliente - Cliente com pedidos = Clientes Sem pedidos)
Esta foi feita em Access !!
SELECT * FROM cliente WHERE id_cliente NOT IN (SELECT id_cliente FROM pedido)
Trouxe todos cliente cadastrados que não fizeram pedido
(Todos Cliente - Cliente com pedidos = Clientes Sem pedidos)
Esta foi feita em Access !!
Realmente gostaris de saber o final desta história .... [S61]
Tópico encerrado , respostas não são mais permitidas