La consulta MySQL Insert no funciona con la cláusula WHERE

Resuelto asked hace 15 años • 31 respuestas

¿Qué hay de malo en esta consulta?

INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;

Funciona sin la WHEREcláusula. Parece que olvidé mi SQL.

 avatar Jan 28 '09 03:01
Aceptado

La sintaxis INSERT de MySQL no admite la cláusula WHERE, por lo que su consulta tal como está fallará. Suponiendo que su idcolumna sea clave única o principal:

Si está intentando insertar una nueva fila con ID 1, debería usar:

INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);

Si está intentando cambiar los valores de peso/peso deseado para una fila existente con ID 1, debería usar:

UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;

Si lo desea, también puede usar la sintaxis INSERT .. ON DUPLICATE KEY de esta manera:

INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145

O incluso así:

INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145

También es importante tener en cuenta que si su idcolumna es una columna de incremento automático, entonces también puede omitirla de su INSERT por completo y dejar que MySQL la incremente normalmente.

Chad Birch avatar Jan 27 '2009 20:01 Chad Birch

No se puede combinar una cláusula WHERE con una cláusula VALUES. Tienes dos opciones hasta donde yo sé:

  1. INSERTAR especificando valores

    INSERT INTO Users(weight, desiredWeight) 
    VALUES (160,145)
    
  2. INSERTAR usando una declaración SELECT

    INSERT INTO Users(weight, desiredWeight) 
    SELECT weight, desiredWeight 
    FROM AnotherTable 
    WHERE id = 1
    
Russ Cam avatar Jan 27 '2009 20:01 Russ Cam