Supongamos que tengo una tabla de MySQL llamada MiTabla, que se ve así:Insertar nueva fila con los datos calculados a partir de otras filas
+----+------+-------+
| Id | Type | Value |
+----+------+-------+
| 0 | A | 1 |
| 0 | B | 1 |
| 1 | A | 2 |
| 1 | B | 3 |
| 2 | A | 5 |
| 2 | B | 8 |
+----+------+-------+
Y, para cada Id
, quiero insertar una nueva fila con el tipo C
cuya Value
es la suma de los valores de tipo A
y B
para las filas del mismo Id
. La clave principal en esta tabla es (Id, Type)
, por lo que no hay dudas sobre la duplicación de los pares Id, Tipo.
puedo crear las filas que quiera con esta consulta:
SELECT MyTable_A.Id AS Id, 'C' AS Type, (A_Val + B_Val) AS Value FROM
(SELECT Id, Value AS A_Val FROM MyTable WHERE Type='A') AS MyTable_A
JOIN (SELECT Id, Value AS B_Val FROM MyTable WHERE Type='B') AS MyTable_B
ON MyTable_A.Id = MyTable_B.Id
El dar:
+----+------+-------+
| Id | Type | Value |
+----+------+-------+
| 0 | C | 2 |
| 1 | C | 5 |
| 2 | C | 13 |
+----+------+-------+
Pero la cuestión es: ¿Cómo se utiliza este resultado para insertar el generado de tipo C
filas en MyTable
?
¿Hay una manera relativamente simple de hacer esto con una consulta, o tengo que escribir un procedimiento almacenado? Y si esto último, la orientación sería útil, ya que no estoy muy bien versado en ellos.
Esto desregulará sus datos. ¿Por qué quieres hacer esto? ¿Qué pasará cuando cambien los A y B? ¿Alguien puede modificar las C? –
La razón por la que esto es obligatorio es que mientras 'C' se define como' A + B', y todas las entradas en las tablas tienen actualmente valores 'A' y' B', habrá entradas futuras donde solo se conoce 'C' y donde no hay forma de determinar el desglose en los componentes 'A' y 'B'. Me doy cuenta de que esto significa que tendré que implementar una lógica de validación externa que asegure que 'C = A + B' para inserciones y actualizaciones en' Id's donde 'A' y' B' * son * conocidos. –