質問

この問題は私を困惑させます:

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

通常、そのトランザクションには複数のステートメントがありますが、明確にするためにそれらを削除しました。

このエラーが表示されます:

#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

MySQLバージョン5.1.36を使用しています

役に立ちましたか?

解決

ステートメントに関する2つの問題:

  1. 挿入するメールを選択していません(IDのみ)
  2. IN 句の代わりに「=」を使用しています。

次のようになります。

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

代わりに。

更新(コメントに基づく)

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

他のヒント

表示されるエラーが少なくとも2つあります:

  1. 2列分のデータ( user_id および email )を挿入しようとしていますが、2列目から1列( user_id )のみを選択しています INSERT INTO ... SELECT の半分。挿入しようとしている列と同じ数の列を選択し、順序を決める必要があります。
  2. SELECT の述語に構文エラーがあります。使用したいと思う:

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

または同等のもの:

WHERE email = 'email1@foo.com'
   OR email = 'email2@bar.com'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top