Question

Ce problème me déconcerte:

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

Normalement, j'ai plusieurs déclarations dans cette transaction, mais je les ai supprimées pour plus de clarté.

Je reçois cette erreur:

#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

J'utilise MySQL version 5.1.36

Était-ce utile?

La solution

Deux problèmes avec votre déclaration:

  1. Vous ne sélectionnez pas le courrier électronique à insérer (identifiant uniquement)
  2. Vous utilisez '=' au lieu de la clause IN .

Devrait être quelque chose comme:

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

à la place.

Mettre à jour (selon les commentaires)

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

Autres conseils

Vous avez au moins deux erreurs que je peux voir:

  1. Vous essayez d'insérer deux colonnes de données ( id_utilisateur et email ) mais en sélectionnant une seule colonne ( id_utilisateur ) dans la seconde la moitié de INSERT INTO ... SELECT . Vous devez sélectionner le même nombre de colonnes que vous essayez d'insérer et l'ordre compte.
  2. Vous avez une erreur de syntaxe dans le prédicat de votre SELECT . Je pense que vous voulez utiliser:

    WHERE email IN ('email1@foo.com', 'email2@bar.com')

ou son équivalent:

WHERE email = 'email1@foo.com'
   OR email = 'email2@bar.com'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top