Aide sur les requêtes de transaction MySQL
-
06-07-2019 - |
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
La solution
Deux problèmes avec votre déclaration:
- Vous ne sélectionnez pas le courrier électronique à insérer (identifiant uniquement)
- 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:
- Vous essayez d'insérer deux colonnes de données (
id_utilisateur
etemail
) mais en sélectionnant une seule colonne (id_utilisateur
) dans la seconde la moitié deINSERT INTO ... SELECT
. Vous devez sélectionner le même nombre de colonnes que vous essayez d'insérer et l'ordre compte. -
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