Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

select q no funciona!

Estas en el tema de select q no funciona! en el foro de Bases de Datos General en Foros del Web. Código: SELECT tbl_distribuidores.id, tbl_distribuidores.nLicencia, tbl_distribuidores.nombre, tbl_distribuidores.TXD30, tbl_fabricante.nSerieTXD30 FROM tbl_distribuidores, tbl_fabricante WHERE tbl_distribuidores.TXD30=tbl_fabricante.nSerieTXD30; Access97, dnde está el error?? me devuelve demasiados registros.. en la tabla tbl_distribuidores ...
  #1 (permalink)  
Antiguo 19/06/2003, 02:56
 
Fecha de Ingreso: diciembre-2002
Mensajes: 18
Antigüedad: 21 años, 11 meses
Puntos: 0
select q no funciona!

Código:
SELECT tbl_distribuidores.id, tbl_distribuidores.nLicencia, tbl_distribuidores.nombre, 
tbl_distribuidores.TXD30, tbl_fabricante.nSerieTXD30 
FROM tbl_distribuidores, tbl_fabricante
WHERE tbl_distribuidores.TXD30=tbl_fabricante.nSerieTXD30;
Access97, dnde está el error??
me devuelve demasiados registros..
en la tabla tbl_distribuidores tengo 12 registros y en la del fabricante tengo 42, pero me devuelve 87!!!
y como mucho debería devolverme 12...
yo tengo q selecionar todos los registros de tbl_distribuidores q tengan el campo tbl_fabricante.nSerieTXD30 = al campo tbl_fabricante.nSerieTXD30...


help!!
  #2 (permalink)  
Antiguo 19/06/2003, 06:24
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

Pero un distribuidor podra tener varios fabricantes que cumplan esa condicion. Por ejemplo

Distribuidores

ID.....nSerieTXD30
1........1
2........2
3........3

Fabricantes

ID.....nSerieTXD30
1........1
2........1
3........3

Consulta

ID_dist....ID_fab...nSerieTXD30_dist....nSerieTXD3 0_fab
1...............1..............1.................. ................1
1...............2..............1.................. ................1
3...............3..............3.................. ................3

En este caso tu consulta te sacara dos registros para el distribuidor 1, uno para el fabricante 1 y otro para el fabricante 2. No te sacara ningun registro para el distribuidor 2. Y te sacara uno para el distribuidor 3. Como no conozco el ambito de los datos, no se si el nSerieTXD30 en los fabricantes y/o distribuidores es unico.

Es decir, tu consulta significa realmente "devuelveme los pares distribuidor fabricante donde se cumpla esa condicion". Si lo que querias era "devuelveme la lista de distribuidores que tengan por lo menos un fabricante con el que coincida el nSerieTXD30" la consulta tendria que ser algo como:

SELECT DISTINCT tbl_distribuidores.id, tbl_distribuidores.nLicencia, tbl_distribuidores.nombre,
tbl_distribuidores.TXD30, tbl_fabricante.nSerieTXD30
FROM tbl_distribuidores, tbl_fabricante
WHERE tbl_distribuidores.TXD30=tbl_fabricante.nSerieTXD3 0;

que te devuelve los registros sin repetir los registros que muestran la misma informacion.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 19/06/2003, 09:02
Avatar de amanda75  
Fecha de Ingreso: junio-2003
Ubicación: cerca, pero no mucho
Mensajes: 684
Antigüedad: 21 años, 5 meses
Puntos: 0
Además de lo que te ha dicho josemi, fíjate en que estén bien ralacionadas las dos tablas.

Saludos
  #4 (permalink)  
Antiguo 19/06/2003, 09:25
 
Fecha de Ingreso: diciembre-2002
Mensajes: 18
Antigüedad: 21 años, 11 meses
Puntos: 0
hola josemi,
ya lo arreglé, de hecho el problema creo q fuese lo de no ser clave ppal, es decir, he puesto el nSerieTXD30 como clave ppal y he podido sacar la consulta.
Ahora pero me encuentro con otro prob, a ver si me puedes ayudar:
No tiene relación con lo de antes aunque el cliente es el mismo.
Tengo una tabla q se llama tbl_final en la que voy añadiendo y actualizando los registros en funcion de otras tablas rellenadas con anterioridad.
El distribuidor rellena su tabla de manera independiente, y cuando ha acabado tengo q añadir lo q ha hecho a la tabla tbl_final. La primera vez que lo hago será algo tipo
INSERT INTO tbl_final (nSerieTXD30, nombre, apellidos,...) SELECT * FROM tbl_distribuidores

Pero la segunda vez que el distribuidor añade datos a su tabla yo una consulta asi no la puedo hacer, pq duplicaría registros. Asi q tengo q discriminar, y tengo q hacerlo en funcion del nSerieTXD30, es decir: inserta en la tbl_final todos los campos de la tbl_distribuidores cuya nSerieTXD30 no exista en la tbl_final.
pero no me sale...
  #5 (permalink)  
Antiguo 19/06/2003, 14:28
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Bueno, has dicho que tienes access07, no se si soporta subconsultas, pero creo que si. Seria algo como

INSERT INTO tbl_final (los campos a insertar) SELECT los campos a leer FROM tbl_distribuidores WHERE nSerieTXD30 NOT IN (SELECT nSerieTXD30 FROM tbl_final)

Espero que este claro.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:38.