Ayuda de consulta de transacciones MySQL
-
06-07-2019 - |
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
Solución
Dos problemas con su declaración:
- No está seleccionando el correo electrónico para insertar (solo ID)
- 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:
- Está intentando insertar dos columnas de datos (
user_id
yemail
) pero solo está seleccionando una columna (user_id
) de la segunda la mitad deINSERT INTO ... SELECT
. Debe seleccionar el mismo número de columnas que está intentando insertar, y el orden importa. -
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