Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/03/2011, 22:35
james-25
 
Fecha de Ingreso: julio-2004
Ubicación: Medellin - Colombia.
Mensajes: 12
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: consulta en BD relacional

Cordial saludo.

esta vez tratare de ser mas claro con el problema:


tengo 4 tablas relacionadas
1. cliente
2. ahocta****cta ahorros
3. ctecta ****cta corriente
4. tipocta

las tablas están relacionadas de la siguiente forma

CREATE TABLE cliente
(
cedula INT NOT NULL,
nom1 VARCHAR(13),
nom2 VARCHAR(13),
ape1 VARCHAR(13),
ape2 VARCHAR(13),
saldo REAL,
INDEX (cedula),
PRIMARY KEY(cedula)
) TYPE = INNODB;

CREATE TABLE ahocta
(
idaho INT NOT NULL,
ctaahor INT,
INDEX (idaho),
PRIMARY KEY(idaho)
) TYPE = INNODB;


CREATE TABLE ctecta
(
idcte INT NOT NULL,
ctacrte INT,
INDEX (idcte),
PRIMARY KEY(idcte)
) TYPE = INNODB;


CREATE TABLE tipocta(
ahocta_idaho INT NOT NULL,
cliente_cedula INT NOT NULL,
ctecta_idcte INT NOT NULL,
PRIMARY KEY(ahocta_idaho, cliente_cedula, ctecta_idcte),
INDEX (ahocta_idaho), INDEX (cliente_cedula), INDEX (ctecta_idcte),
FOREIGN KEY(ahocta_idaho) REFERENCES ahocta(idaho),
FOREIGN KEY(cliente_cedula) REFERENCES cliente(cedula),
FOREIGN KEY(ctecta_idcte) REFERENCES ctecta(idcte)
) TYPE = INNODB;


Para la tabla cliente ingresé los siguiente registros:

mysql> SELECT *FROM cliente;
+----------+-----------+--------+---------+------------+-------+
| cedula | nom1 | nom2 | ape1 | ape2 | saldo |
+----------+-----------+--------+---------+------------+-------+
| 8128 | James | Andreis | Alvarez | Chavarria | 0 |
| 7161 | Francisco | Javier | Alvarez | Alvarez | 0 |
+----------+-----------+--------+---------+------------+-------+

Para la tabla ahocta ingresé los siguiente registros:

mysql> SELECT * FROM ahocta;
+-------+---------+
| idaho | ctaahor |
+-------+---------+
| 1 | 1015125 |
| 2 | 352679 |
| 3 | 352680 |
| 4 | 352690 |
+-------+---------+

mysql> SELECT * FROM tipocta;
+--------------+----------------+--------------+
| ahocta_idaho | cliente_cedula | ctecta_idcte |
+--------------+----------------+--------------+
| 1 | 8128 | 1 |
+--------------+----------------+--------------+

Se supone que el numero de cuenta "1015125" con código "1" le fue asignado SOLAMENTE al usuario con cédula "8128"

Cuando realiza esta consulta :

mysql> SELECT cédula, nom1, ape1, ahocta.ctaahor FROM cliente NATURAL JOIN ahocta WHERE idaho=1;

este es el resultado:

+----------+-----------+---------+---------+
| cedula | nom1 | ape1 | ctaahor |
+----------+-----------+---------+---------+
| 8128 | James | Alvarez | 1015125 |
| 7161 | Francisco | Alvarez | 1015125 |
+----------+-----------+---------+---------+

cuando se supone que solo me debería aparecer un solo registro en este caso el de la cedula "8128".


pero al realizar la siguiente consulta se aparece lo que yo quiero que aparezca:

mysql> SELECT cedula, nom1, ape1, ahocta.ctaahor FROM cliente NATURAL JOIN ahocta WHERE idaho=1 AND cedula="8128";
+---------+-------+---------+---------+
| cedula | nom1 | ape1 | ctaahor |
+---------+-------+---------+---------+
| 8128 | James | Alvarez | 1015125 |
+---------+-------+---------+---------+
1 row in set (0.01 s

pero es obvio ya que lo filtro por cedula.

En conclusión ; No es lógico que si yo le asigno un registro a un solo id, en este caso a el numero de cedula en mención le aparezca asignado o se repita a los demás usuarios de la base de datos.

espero haber sido mas claro y que este código le sirva a muchos usuarios.

Nota: si este código es de su utilidad espero me asignen puntuación


Muchas gracias por su atención prestada.