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

Query para crear tabla

Estas en el tema de Query para crear tabla en el foro de Mysql en Foros del Web. Hola, Estoy un poco perdido, tengo que hacer una tabla partiendo de los datos de otras dos, por lo que he intentado crear esta tabla: ...
  #1 (permalink)  
Antiguo 15/04/2013, 05:34
 
Fecha de Ingreso: febrero-2013
Mensajes: 33
Antigüedad: 11 años, 2 meses
Puntos: 0
Query para crear tabla

Hola,

Estoy un poco perdido, tengo que hacer una tabla partiendo de los datos de otras dos, por lo que he intentado crear esta tabla:
Código MySQL:
Ver original
  1. mysql> create table EMP_CLI
  2.     -> (cliente INT(4),
  3.     -> nombre varchar(25),
  4.     -> emp INT(4),
  5.     -> apellido varchar(8),
  6.     -> constraint FK_EMP_NO foreign key (emp) references empleados(emp_no),
  7.     -> constraint FK_NOMBRE foreign key (nombre) references clientes(nombre),
  8.     -> constraint FK_CLIENTE_NO foreign key (cliente) references clientes(client
  9. e_no),
  10.     -> constraint FK_APELLIDO foreign key (apellido) references emleados(apellid
  11. o)
  12.     -> );
  13. ERROR 1005 (HY000): Can't create table '.\curso\emp_cli.frm' (errno: 150)

pero me da ese error, y no sé el porqué, he añadido al final el delete on cascade y tampoco.

Gracias

Última edición por gnzsoloyo; 18/04/2013 a las 09:49
  #2 (permalink)  
Antiguo 15/04/2013, 06:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Query para crear tabla

Con la referencia al numero de empleado deberías tener bastante, siempre que sea PK de la tabla empleados... y si tienes el numero de empleado en otra tabla para que quieres aqui nombre y apellido...

Si no es eso dinos que tienes en las dos tablas originales (lista de campos y su significado) y que resultado esperas en la tabla resultante (lista de campos).

Una tabla EMP_CLI, de relacion empleado cliente solo necesita el identificador del empleado y el del cliente, todo lo demas es inecesario. .... podria tener info de fechas de esa relación pero no el nombre y apellido del empleado. Imagina que por lo que sea cambia de nombre o apellido, tendrias que cambiarlo en todas las relaciones empleado/cliente mientras que si no lo pones con cambiarlo una vez en la tabla empleados todo queda hecho.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 15/04/2013, 06:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Query para crear tabla

Tengo la impresión de que no has entendido lo que es una FK.
Una FK apunta únicamente a una PK (MySQL extiende el uso a campos UNIQUE en su tabla), y dudo mucho que "nombre" sea PK de cliente.
Por otro lado, si la clave primaria referida es multicampo, la FK se debe tener los mismos campos, en el mismo orden, y además la declaración de FK debe referir el grupo de campos que son FK a la PK completa de la otra tabla....
Me parece que necesitas repasar los fundamentos de las foreign keys.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 18/04/2013, 09:47
 
Fecha de Ingreso: febrero-2013
Mensajes: 33
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Query para crear tabla

Código MySQL:
Ver original
  1. mysql> create table emp_cli
  2.     -> (
  3.     -> cliente_no int(4),
  4.     -> nombre varchar(25),
  5.     -> emp_no int(4),
  6.     -> apellido varchar(8),
  7.     -> CONSTRAINT FK_EMP_NO foreign key (emp_no) references empleados(emp_no),
  8.     -> CONSTRAINT FK_CLIENTE_NO foreign key (cliente_no) references clientes(cli
  9. ente_no)
  10.     -> );


Tenias razón, había mezclado claves primarias con lo que no eran.

Ahora tengo otro problema, según la documentación que tengo, no explica como se pueden actualizar todos los registros de una tabla mediante select anidados. He intentado esto, pero falla,...

mysql> update tabla
-> set id_1 =
-> (select (t1.id_1-SUM(t2.id_2)), t1.producto
-> from tabla2 t2, tabla1 t1
-> where t1.producto=t2.producto
-> group by t1.producto)
-> where EXIST
-> (select t1.id_1, t2.producto
-> from tabla1
-> );

Última edición por vankish_ru; 18/04/2013 a las 09:54
  #5 (permalink)  
Antiguo 18/04/2013, 13:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Query para crear tabla

Código MySQL:
Ver original
  1. update tabla set id_1 = (select (t1.id_1-SUM(t2.id_2)), t1.producto
  2. from tabla2 t2, tabla1 t1
  3. where t1.producto=t2.producto
  4. group by t1.producto)
  5. where EXIST
  6. (select t1.id_1, t2.producto
  7. from tabla1);

Lo siento pero no entiendo ni lo que pretendes hacer...
UPDATE tabla .... que tabla??

Postea la estructura de las tablas y trata de explicar lo que pretendes hacer.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: query, sql, tabla
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 20:42.