Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

consulta con Access

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: consulta con Access Responder citando

Estoy tratando de crear una consulta y me he dejado toda la mañana en hacerla.
El caso es que hago la siguiente:
Código:

SELECT codigo, modelo, descripcion, nom_seccion,nom_cliente
FROM TAB_Seccion, TAB_Modelos
WHERE codigo=modelo AND nom_seccion = '"+seccion+"' AND nom_cliente ='"+cliente+"';"

Hasta aquí bien.
Pero lo que pretendo es hacer una consulta que me muestre los modelos que NO están en la consulta anterior. He probado con inner Joins con nots pero no se hacer la consulta correctamente, aun cuando hago SELECT DISTINCT se me repiten descripciones, así por ejemplo:
Código:

SELECT DISTINCT codigo, modelo, descripcion, nom_seccion,nom_cliente
FROM TAB_Seccion, TAB_Modelos
WHERE NOT codigo=modelo AND nom_seccion = '"+seccion+"' AND nom_cliente ='"+cliente+"';"


Veo que no hago bien la consulta aunque he probado varias cosas. Como deberia hacerla?
muchas gracias
_________________
Be water my friend.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Re: consulta con Access Responder citando

De entrada veo algo raro en la consulta: ¿Cómo sabe Access que campo es de cada tabla? No domino yo este motor de base de datos, pero con SQL había que diferenciar las tablas cuando hay más de una en una consulta; algo así:
Código:
SELECT A.codigo, B.modelo, B.descripcion, A.nom_seccion, A.nom_cliente
FROM TAB_Seccion A, TAB_Modelos B
WHERE A.codigo = B.modelo AND A.nom_seccion = '"+seccion+"' AND A.nom_cliente ='"+cliente+"';"

Suponiendo que en TAB_Seccion están codigo, nom_.seccion y nom_cliente y modelo y descripcion en TAB_Modelos. En la segunda consulta:
Cita:
Código:
SELECT DISTINCT codigo, modelo, descripcion, nom_seccion,nom_cliente
FROM TAB_Seccion, TAB_Modelos
WHERE NOT codigo=modelo AND nom_seccion = '"+seccion+"' AND nom_cliente ='"+cliente+"';"

Además del comentario anterior sobre las tablas, además con la clausula NOT SÓLO estás pidiendo que codigo sea distinto de modelo; necesitas una consulta que no cumple ninguna de las condiciones. Prueba algo así:
Código:
SELECT A.codigo, B.modelo, B.descripcion, A.nom_seccion, A.nom_cliente FROM TAB_Seccion A, TAB_Modelos B WHERE A.codigo NOT IN (SELECT A.codigo FROM TAB_Seccion A, TAB_Modelos B WHERE A.codigo = B.modelo AND A.nom_seccion = '"+seccion+"' AND A.nom_cliente ='"+cliente+"';")

o tal vez:
Código:
SELECT A.codigo, B.modelo, B.descripcion, A.nom_seccion, A.nom_cliente FROM TAB_Seccion A, TAB_Modelos B WHERE A.codigo <> B.modelo AND A.nom_seccion <> '" + seccion + "' AND A.nom_cliente <>'" + cliente + "';"

Ya me dirás si te vale la pista Wink
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola, Angel gracias por tus respuestas.

La segunda consulta que me das hace que de salida salgan tropecientos registros.
Pero la primera la he retocado un poco (me daba errores en Access...) y escribí la siguiente:
Código:

SELECT DISTINCT B.descripcion
FROM TAB_Seccion AS A, TAB_Modelo AS B
WHERE B.descripcion NOT IN (
      SELECT B.descripcion
      FROM TAB_Seccion AS A
      WHERE A.modelo = B.codigo AND A.nom_seccion = '"+seccion+"' AND A.nom_cliente = '"+cliente+"');


Esta consulta funciona en Access, pero es SUPER lenta. Hay alguna manera de arreglarla?
Muchas gracias.
_________________
Be water my friend.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

best_guitar escribió:
Código:
SELECT DISTINCT B.descripcion
FROM TAB_Seccion AS A, TAB_Modelo AS B
WHERE B.descripcion NOT IN (
      SELECT B.descripcion
      FROM TAB_Seccion AS A
      WHERE A.modelo = B.codigo AND A.nom_seccion = '"+seccion+"' AND A.nom_cliente = '"+cliente+"');

¿Esto te funciona bien así? No debería porque en el segundo SELECT estás usando campos de dos tablas que no están declaradas en él. Al margen de eso es lenta porque hace una select y sobre ella, elimina los que no necesita; ya demás sólo te saca el campo descripcion.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

si, ya sabemos como es MS para los standars. De hecho he modificado la consulta y ahora va de maravilla.

Código:

SELECT DISTINCT B.descripcion
FROM  TAB_Modelo AS B
WHERE B.descripcion NOT IN (
      SELECT B.descripcion
      FROM TAB_Seccion AS A,TAB_Modelo AS B
      WHERE A.modelo = B.codigo AND A.nom_seccion = '"+seccion+"' AND A.nom_cliente = '"+cliente+"');


Aunque tiene más sentido esta consulta no deja de ser raro que la anterior funcionara...
gracias por todo.
_________________
Be water my friend.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Espero no escribir una burrada..

Código:



SELECT codigo, modelo, descripcion, nom_seccion,nom_cliente
FROM TAB_Seccion, TAB_Modelos
WHERE  codigo=modelo AND nom_seccion <> '"+seccion+"' AND nom_cliente <>'"+cliente+"';"


entiendo que codigo=modelo es el enlace para obtener la descripcion de la otra tabla

Negando las condiciones obtengo el complemento del conjunto?
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Hola a todos,

muy buena tu respuesta Best_guitar, el NOT IN de una subconsulta, si me permites un retoque a tu query...

Código:

SELECT DISTINCT B.descripcion
FROM  TAB_Modelo AS B
WHERE B.descripcion NOT IN (
      SELECT DISTINCT B.descripcion
      FROM TAB_Seccion AS A,TAB_Modelo AS B
      WHERE A.modelo = B.codigo AND A.nom_seccion = '"+seccion+"' AND A.nom_cliente = '"+cliente+"')


es simplemente un distinct en la subconsulta porque al ser un campo de descripcion me imagino que no sera una Primary key y puede que devuelva mas de un registro.

Saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.