Pregunta

Este problema me desconcierta:

BEGIN;
INSERT INTO sub_users(user_id, email) 
SELECT user_id FROM users WHERE email='someemail@email.com', '$email';
COMMIT;

Normalmente, tengo varias declaraciones en esas transacciones, pero las eliminé para mayor claridad.

Me sale este error:

#1064 - 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 ' 'test@email.com'' at line 1

Estoy usando MySQL versión 5.1.36

¿Fue útil?

Solución

Dos problemas con su declaración:

  1. No está seleccionando el correo electrónico para insertar (solo ID)
  2. Estás usando '=' en lugar de la cláusula IN .

Debería ser algo como:

INSERT INTO sub_users(user_id, email)
 SELECT user_id, email FROM users
  WHERE email IN ('someemail@email.com', 'test@email.com');

en su lugar.

Actualización (según el comentario)

INSERT INTO sub_users(user_id, email)
 SELECT user_id, 'test@email.com' FROM users
  WHERE email = 'someemail@email.com';

Otros consejos

Tiene al menos dos errores que puedo ver:

  1. Está intentando insertar dos columnas de datos ( user_id y email ) pero solo está seleccionando una columna ( user_id ) de la segunda la mitad de INSERT INTO ... SELECT . Debe seleccionar el mismo número de columnas que está intentando insertar, y el orden importa.
  2. Tiene un error de sintaxis en el predicado de su SELECT . Creo que quieres usar:

    DONDE ENTRAR el correo electrónico ('email1@foo.com', 'email2@bar.com')

o su equivalente:

WHERE email = 'email1@foo.com'
   OR email = 'email2@bar.com'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top