not - MySQL Insert Donde consulta
result grid mysql workbench windows (24)
¿La cláusula WHERE se puede usar realmente con INSERT-INTO-VALUES en cualquier caso?
La respuesta es definitivamente no.
Agregar una cláusula WHERE después de INSERT INTO ... VALUES ... es solo SQL no válido, y no se analizará.
El error devuelto por MySQL es:
mysql> INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''WHERE id = 1'' at line 1
La parte más importante del mensaje de error es
... syntax to use near ''WHERE id = 1'' ...
que muestra la parte específica que el analizador no esperaba encontrar aquí: la cláusula WHERE.
¿Qué pasa con esta consulta?
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Funciona sin la cláusula WHERE
. Parece que olvidé mi SQL ...
La consulta de inserción no admite la palabra clave *
Las condiciones se aplican porque puede usar la condición where para las declaraciones de sub selección. Puede realizar inserciones complicadas utilizando sub selecciones.
Por ejemplo:
INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = ''Newark'';
Al colocar un "seleccionar" en la instrucción de inserción, puede realizar varias inserciones rápidamente.
Con este tipo de inserción, es posible que desee comprobar el número de filas que se insertan. Puede determinar el número de filas que se insertarán ejecutando la siguiente instrucción SQL antes de realizar la inserción.
SELECT count(*)
FROM customers
WHERE city = ''Newark'';
Puede asegurarse de no insertar información duplicada utilizando la condición EXISTS.
Por ejemplo, si tuviera una tabla llamada clientes con una clave principal de client_id, podría usar la siguiente declaración:
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, ''advertising''
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);
Esta instrucción inserta múltiples registros con una subselección.
Si desea insertar un solo registro, puede usar la siguiente declaración:
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, ''IBM'', ''advertising''
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);
El uso de la tabla dual le permite ingresar sus valores en una declaración de selección, incluso si los valores no están almacenados actualmente en una tabla.
Consulte también Cómo insertar con where cláusula
LEA ESTO TAN BIEN
No tiene sentido ... incluso literalmente
INSERT
significa agregar una new row
y cuando dices WHERE
defines de qué fila estás hablando en el SQL
.
Por lo tanto, no es posible agregar una nueva fila con una condición en una fila existente.
Tienes que elegir entre lo siguiente:
A. Use UPDATE
lugar de INSERT
B. Use INSERT
y elimine la cláusula WHERE
(solo lo digo ...) o si está obligado a utilizar INSERT
y WHERE
en una sola declaración solo se puede hacer mediante la cláusula INSERT..SELECT ...
INSERT INTO Users( weight, desiredWeight )
SELECT FROM Users WHERE id = 1;
Pero esto tiene un propósito completamente diferente y si ha definido la identificación como clave principal, esta inserción fallará; de lo contrario, se insertará una nueva fila con id = 1.
Creo que tu mejor opción es usar REEMPLAZAR en su lugar INSERTAR
REEMPLAZAR EN los usuarios (id, weight, desiredWeight) VALUES (1, 160, 145);
Depende de la situación INSERT puede tener una cláusula where.
Por ejemplo, si está haciendo coincidir valores de un formulario.
Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,[email protected],160,145) WHERE name != fred AND email != [email protected]
Tiene sentido, ¿no?
Después de la cláusula WHERE
usted pone una condición y se usa para obtener datos o actualizar una fila. Cuando está insertando datos, se supone que la fila no existe.
Entonces, la pregunta es, ¿hay alguna fila cuyo id sea 1? si es así, use MySQL UPDATE ; de lo contrario, use MySQL INSERT .
Insertar en = Agregar filas a una tabla
Upate = actualizar filas específicas.
¿Qué describiría la cláusula where en su inserto? No tiene nada que coincida, la fila no existe (todavía) ...
La sintaxis de MySQL INSERT no admite la cláusula WHERE, por lo que su consulta, tal como está, fallará. Suponiendo que su columna de id
es única o clave principal:
Si intenta insertar una nueva fila con la ID 1, debe usar:
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
Si está tratando de cambiar los valores de peso / peso deseado para una fila existente con ID 1, debe 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 la siguiente 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 columna de id
es una columna de autoincremento, entonces también podría omitirla de su INSERT todo junto y dejar que mysql la incremente de forma normal.
La forma más simple es usar IF para violar su restricción de clave. Esto solo funciona para INSERTAR IGNORAR pero le permitirá usar la restricción en un INSERTAR.
INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),''Test'');
La respuesta correcta a esta pregunta será algo así:
un). SI quiere seleccionar antes de insertar:
INSERT INTO Users( weight, desiredWeight )
select val1 , val2 from tableXShoulatNotBeUsers
WHERE somecondition;
segundo). Si el registro ya existe, use la actualización en lugar de la inserción:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Debiera ser
Update Users set weight=160, desiredWeight=145 WHERE id = 1;
do). Si quieres actualizar o insertar al mismo tiempo
Replace Users set weight=160, desiredWeight=145 WHERE id = 1;
Note):- you should provide values to all fields else missed field in query
will be set to null
re). Si desea CLONAR un registro de la MISMA tabla, solo recuerde que no puede seleccionar de la tabla a la que está insertando, por lo tanto,
create temporary table xtable ( weight int(11), desiredWeight int(11) ;
insert into xtable (weight, desiredWeight)
select weight, desiredWeight from Users where [condition]
insert into Users (weight, desiredWeight)
select weight , desiredWeight from xtable;
Creo que esta bonita cubre la mayoría de los escenarios
No creo que el inserto tenga una cláusula WHERE.
No debe usar la condición where en la instrucción Insert. Si desea hacerlo, use insert en una declaración de actualización y luego actualice un registro existente.
En realidad, ¿puedo saber por qué necesita una cláusula where en Insertar declaración?
Tal vez basado en la razón por la que podría sugerirte una mejor opción.
No puede combinar una cláusula WHERE con una cláusula VALUES. Tienes dos opciones, por lo que yo sé,
INSERT especificando valores
INSERT INTO Users(weight, desiredWeight) VALUES (160,145)
INSERT usando una instrucción SELECT
INSERT INTO Users(weight, desiredWeight) SELECT weight, desiredWeight FROM AnotherTable WHERE id = 1
No puede usar INSERT y WHERE juntos. Puede usar la cláusula UPDATE para agregar valor a una columna particular en un campo particular, como el código siguiente;
UPDATE Users
SET weight=''160'',desiredWeight =''145''
WHERE id =1
No. Por lo que sé, no puede agregar la cláusula WHERE en esta consulta. Quizás también olvidé mi SQL, porque de todos modos no estoy seguro de por qué lo necesitas.
Puede hacer INSERT condicional en función de la entrada del usuario. Esta consulta solo se insertará si los valores de entrada ''$ userWeight'' y ''$ userDesiredWeight'' no están en blanco
INSERT INTO Users(weight, desiredWeight )
select ''$userWeight'', ''$userDesiredWeight''
FROM (select 1 a ) dummy
WHERE ''$userWeight'' != '''' AND ''$userDesiredWeight''!='''';
Si está especificando un registro particular, no para insertar datos, es mejor utilizar la instrucción UPDATE
lugar de la INSERT
.
Este tipo de consulta que ha escrito en la pregunta es como una consulta ficticia.
Su consulta es: -
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Aquí, especifica el ID = 1, por lo que es mejor usar la instrucción UPDATE
para actualizar el registro existente. No se recomienda usar la cláusula WHERE
en caso de INSERT
. Debe usar UPDATE
.
Ahora usando la consulta de actualización: -
UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;
Simplemente no puede usar DONDE al hacer una instrucción INSERT:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
debiera ser:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 );
La parte WHERE solo funciona en las sentencias SELECT:
SELECT from Users WHERE id = 1;
o en las declaraciones de ACTUALIZACIÓN:
UPDATE Users set (weight = 160, desiredWeight = 145) WHERE id = 1;
Soy consciente de que esta es una publicación anterior, pero espero que esto ayude a alguien, con lo que espero sea un simple ejemplo:
fondo:
Tuve un caso de muchos a muchos: el mismo usuario aparece varias veces con múltiples valores y quería crear un nuevo registro, por lo tanto, ACTUALIZAR no tendría sentido en mi caso y tenía que dirigirme a un usuario en particular al igual que haría. usando una cláusula WHERE.
INSERT into MyTable(aUser,aCar)
value(User123,Mini)
Al usar este constructo, en realidad te enfocas en un usuario específico (usuario123, que tiene otros registros) por lo que realmente no necesitas una cláusula Where, creo.
la salida podría ser:
aUser aCar
user123 mini
user123 HisOtherCarThatWasThereBefore
Utiliza la cláusula WHERE para consultas de ACTUALIZACIÓN. Cuando INSERTAS, estás asumiendo que la fila no existe.
En MySQL, si desea INSERTAR o ACTUALIZAR, puede usar la consulta REEMPLAZAR con una cláusula WHERE. Si el DONDE no existe, INSERTA, de lo contrario ACTUALIZA.
EDITAR
Creo que el punto de Bill Karwin es lo suficientemente importante como para sacar los comentarios y hacerlo muy obvio. Gracias Bill, ha pasado demasiado tiempo desde que trabajé con MySQL, recordé que tenía problemas con REPLACE, pero olvidé cuáles eran. Debería haberlo buscado.
Así no es como funciona el REPLACE de MySQL. Hace un BORRAR (que puede no ser operativo si la fila no existe), seguido de un INSERTAR. Piensa en las consecuencias vis. desencadenantes y dependencias de clave externa. En su lugar, use INSERTAR ... EN ACTUALIZACIÓN DE LLAVE DUPLICADA.
la sintaxis correcta para la inserción de mysql en la declaración usando el método de publicación es:
$sql="insert into ttable(username,password) values(''$_POST[username]'',''$_POST[password]'')";
no creo que podamos usar la cláusula where en la frase de inserción
todo está mal. INSERTAR CONSULTA no tiene una cláusula WHERE, solo UPDATE QUERY lo tiene. Si desea agregar datos donde id = 1, su consulta será
UPDATE Users SET weight=160, desiredWeight= 145 WHERE id = 1;
INSERT INTO Users(weight, desiredWeight )
SELECT ''$userWeight'', ''$userDesiredWeight''
FROM (select 1 a ) dummy
WHERE ''$userWeight'' != '''' AND ''$userDesiredWeight''!='''';