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

Problema Insertando datos de tablas multiples

Estas en el tema de Problema Insertando datos de tablas multiples en el foro de Bases de Datos General en Foros del Web. Porfavor necesito ayuda para resolver un problema: A partir de estas 2 tablas Crea una tabla denominada DIFERENCIAS con 3 columnas: Referencia. Descripción. Diferencia. Inserta ...
  #1 (permalink)  
Antiguo 26/05/2011, 04:39
gteon
Invitado
 
Mensajes: n/a
Puntos:
Problema Insertando datos de tablas multiples

Porfavor necesito ayuda para resolver un problema:

A partir de estas 2 tablas

Crea una tabla denominada DIFERENCIAS con 3 columnas:

Referencia.
Descripción.
Diferencia.

Inserta en ella una fila por cada actuación en la que el tiempo estimado de la tabla ACTUACIONES no coincida con las horas realmente recogidas en la tabla Realizan.

Para las columnas Referencia y Descripción elige los tipos de datos y tamaño coincidentes con las columnas de la tabla ACTUACIONES y en la columna Diferencia recoge la diferencia entre Horas y TiempoEstimado.

ACTUACIONES
Código:
Referencia, Descripcion, TiempoEstimado, Importe
'1110001111', 'Cambiar correa de distribuci?n', '2.50', '125.00'
'1110002222', 'Cambiar tubo de escape', '3.00', '150.00'
'1110003333', 'Sustituir junta de inyectores', '2.70', '135.00'
'1110004444', 'Sustituci?n mando regulaci?n velocidad', '0.60', '30.00'
'1110005555', 'Cambiar compresor de aire acondicionado', '3.30', '160.50'
'1110006666', 'Cambiar bater', '1.30', '60.50'
'1110007777', 'Sustituci?n escobillas', '0.70', '35.00'
'1110008888', 'Sustituci?n de l?mparas', '0.20', '10.00'
'1110009999', 'Limpieza de inyectores', '1.75', '87.50'
'1111110000', 'Sustituci?n correa transmisi?n', '2.15', '100.75'
'1112220000', 'Limpieza carburador', '2.10', '100.50'
'1113330000', 'Cambio filtro aceite', '0.70', '35.00'
'1114440000', 'Cambiar junta', '0.20', '10.00'
'1115550000', 'Sustituir l?quido de frenos', '0.50', '25.00'
'1116660000', 'Cambiar amortiguadores', '1.50', '75.00'
'1117770000', 'Cambiar radiador', '2.50', '120.50'
'1118880000', 'Limpiar Buj?as', '0.30', '20.50'
REALIZAN
Cita:
IdReparacion, Referencia, Horas
'1', '1110001111', '2.50'
'1', '1114440000', '0.20'
'2', '1110002222', '3.00'
'3', '1110003333', '3.00'
'3', '1110009999', '1.75'
'4', '1110004444', '0.60'
'5', '1110005555', '3.30'
'6', '1110007777', '0.10'
'6', '1110008888', '0.30'
'7', '1110006666', '1.30'
'8', '1110006666', '1.30'
'8', '1114440000', '0.20'
'10', '1114440000', '0.20'
'10', '1117770000', '2.50'
'10', '1118880000', '0.30'
Mi codigo

Código SQL:
Ver original
  1. CREATE TABLE DIFERENCIAS (
  2. Referencia VARCHAR(10) NOT NULL,
  3. Descripcion VARCHAR(100),
  4. Diferencia DECIMAL(4,2),
  5. PRIMARY KEY(Referencia)
  6. )ENGINE=InnoDB;
  7.  
  8. INSERT INTO DIFERENCIAS SELECT Referencia, Descripcion FROM ACTUACIONES WHERE TiempoEstimado != (SELECT Horas FROM Realizan);

Pero insert into me da error :S

Alguna ayuda?.
  #2 (permalink)  
Antiguo 26/05/2011, 06:57
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: Problema Insertando datos de tablas multiples

Cita:
Pero insert into me da error :S
Si no nos dices qué error de da, es difícil saber por dónde va la cosa.
De todos modos se puede inferir a simple vista: La tabla en la que quieres insertar tiene tres campos y el select sólo devuelve dos. Eso está mal, para hacerlo tienes que indicar qué campos vas a ingresar, o bien invocar todos los campos necesarios en el SELECT.

Si no es ese error, dinos qué es lo que responde MySQL (acostúmbrate a copiar y postear los mensajes de error, ayudan mucho).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 26/05/2011, 07:40
gteon
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema Insertando datos de tablas multiples

Código SQL:
Ver original
  1. SELECT Referencia, Descripcion FROM ACTUACIONES WHERE TiempoEstimado != (SELECT Horas FROM Realizan);

Bueno el error viene de esta consulta y me da esto.

Error Code: 1242
Subquery returns more than 1 row
  #4 (permalink)  
Antiguo 26/05/2011, 09:03
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: Problema Insertando datos de tablas multiples

Eso está mejor.
El problema es que estás usando un operador lógico unario, es decir, algo que debe comparar un único valor con otro valor, también único. Pero la subconsulta devuelve más de uno, entonces el "!=" no se puede usar.
Código MySQL:
Ver original
  1.     Referencia,
  2.     Descripcion
  3.     ACTUACIONES
  4.     TiempoEstimado  NOT IN (SELECT Horas FROM Realizan);

Esto es diferente, NOT IN() e IN() hacen la comparación con un conjunto de valores, sea devueltos por una subconsulta o sean varios valores separados por comas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: multiples, tablas, bases-de-datos
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 12:12.