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

È stato utile?

Soluzione

Due problemi con la tua dichiarazione:

  1. Non stai selezionando l'e-mail da inserire (solo ID)
  2. 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:

  1. Stai provando a inserire due colonne di dati ( user_id e email ) ma selezionando solo una colonna ( user_id ) dalla seconda metà di INSERT INTO ... SELECT . Devi selezionare lo stesso numero di colonne che stai cercando di inserire e ordinare le cose.
  2. 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
scroll top