 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
best_guitar Lt


Registrado: 12 Nov 2005Mensajes: 92
|
Publicado: Dom 08 Jun, 2008 1:23 pm Asunto: consulta con Access |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 09 Jun, 2008 7:56 am Asunto: Re: consulta con Access |
|
|
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  _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
best_guitar Lt


Registrado: 12 Nov 2005Mensajes: 92
|
Publicado: Mar 10 Jun, 2008 12:30 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 10 Jun, 2008 3:59 pm Asunto: |
|
|
| 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 |
|
 |
best_guitar Lt


Registrado: 12 Nov 2005Mensajes: 92
|
Publicado: Jue 12 Jun, 2008 10:15 am Asunto: |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Vie 13 Jun, 2008 5:53 pm Asunto: |
|
|
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 |
|
 |
kekal Ens


Registrado: 21 Jun 2005Mensajes: 37Ubicación: España
|
Publicado: Lun 23 Jun, 2008 5:21 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|