tiempo - trigger mysql after insert misma tabla
Seleccione de la misma tabla como Insertar o Actualizar (5)
Claramente, lo siguiente es incorrecto.
INSERT INTO `aTable` (`A`,`B`) VALUES((SELECT MAX(`A`) FROM `aTable`)*2),''name'');
Obtengo el valor:
Consulta SQL:
INSERT INTO `aTable` (`A`, `B` )
VALUES
(
(
SELECT MAX(`A`)
FROM `aTable`
) *2
, ''name''
)
MySQL dijo:
1093 - No se puede especificar la tabla de destino ''aTable'' para la actualización en la cláusula FROM
Por lo tanto, estoy tratando de hacer una tabla de mapa de bits, cada fila corresponde a un bit, y tiene un valor de ''mapa''.
Para insertar en la tabla, no quiero hacer dos consultas, quiero hacer una. ¿Cómo debería hacer esto?
Nadie comentó sobre esto, pero como estoy tratando de hacer un mapa de bits, debería ser * 2 not ^ 2, mi error, por favor tenga en cuenta que es por eso que los comentarios a menudo dicen ^ 2, fue un error en la versión que los comentaristas leer.
Creo que debe soltar los "VALORES" y tener una declaración de selección válida.
No soy particularmente un chico mySQL, utilizo MSSQL principalmente. Pero si formatea la declaración de selección correctamente, debería funcionar.
Supongo que INSERTAR ... ¿SELECCIONAR no funciona? Veo esto en la documentación para ello:
La tabla de destino de la instrucción INSERT puede aparecer en la cláusula FROM de la parte SELECT de la consulta. (Esto no fue posible en algunas versiones anteriores de MySQL). En este caso, MySQL crea una tabla temporal para contener las filas de SELECT y luego inserta esas filas en la tabla de destino.
Por curiosidad, ¿qué versión de MySQL estás usando?
tan pronto como el Select sea correcto puede hacerlo.
tratar:
insert into aTable select max(a)^2, ''name'' from aTable;
o
insert into aTable select max(a)^2, ''name'' from aTable group by B;
Si necesita una unión, puede hacer esto:
insert into aTable select max(a)^2, ''name'' from aTable, bTable;
Mi "versión del servidor" es "5.0.51b-community-nt MySQL Community Edition (GPL)"
En realidad, puede alias la tabla en el inserto. He visto esta pregunta por todos lados, pero nadie parece haber intentado eso. Use una subconsulta para obtener el máximo de la tabla, pero alias la tabla en la subconsulta.
INSERT INTO tableA SET fieldA = (SELECT max(x.fieldA) FROM tableA x)+1;
Un ejemplo más complejo, donde tiene una clave secundaria correspondiente y podría estar insertando el PRIMER registro de la clave secundaria correspondiente:
INSERT INTO tableA SET secondaryKey = 123, fieldA = COALESCE((SELECT max(x.fieldA) FROM tableA x WHERE x.secondaryKey = 123)+1,1);
Al aliasar la tabla, no arroja el error y parece funcionar. Acabo de hacer esto mientras codificaba algo, aunque no puedo ver si hay algún error de sintaxis arriba, probaría ese tipo de sintaxis.