Aiuto per le query sulle transazioni MySQL
-
06-07-2019 - |
Domanda
Questo problema mi sta sconcertando:
BEGIN;
INSERT INTO sub_users(user_id, email)
SELECT user_id FROM users WHERE email='someemail@email.com', '$email';
COMMIT;
Normalmente, ho più dichiarazioni in quelle transazioni, ma le ho rimosse per chiarezza.
Ottengo questo errore:
#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
Sto usando MySQL versione 5.1.36
Soluzione
Due problemi con la tua dichiarazione:
- Non stai selezionando l'e-mail da inserire (solo ID)
- Stai utilizzando '=' invece di IN clausola.
Dovrebbe essere qualcosa del tipo:
INSERT INTO sub_users(user_id, email)
SELECT user_id, email FROM users
WHERE email IN ('someemail@email.com', 'test@email.com');
, invece.
Aggiorna (in base al commento)
INSERT INTO sub_users(user_id, email)
SELECT user_id, 'test@email.com' FROM users
WHERE email = 'someemail@email.com';
Altri suggerimenti
Hai almeno due errori che posso vedere:
- Stai provando a inserire due colonne di dati (
user_id
eemail
) ma selezionando solo una colonna (user_id
) dalla seconda metà diINSERT INTO ... SELECT
. Devi selezionare lo stesso numero di colonne che stai cercando di inserire e ordinare le cose. -
Hai un errore di sintassi nel predicato del tuo
SELECT
. Penso che tu voglia usare:DOVE E-mail IN ('email1@foo.com', 'email2@bar.com')
o equivalente:
WHERE email = 'email1@foo.com'
OR email = 'email2@bar.com'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow