-2

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

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 を使用しています

4

2 に答える 2

2

少なくとも 2 つのエラーがあります。

  1. user_id2 列分のデータ (および)を挿入しようとしていますが、の後半からemail1 列 ( ) しか選択していません。挿入しようとしているのと同じ数の列を選択する必要があり、順序が重要です。user_idINSERT INTO ... SELECT
  2. の述語に構文エラーがありますSELECT。私はあなたが使いたいと思う:

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

またはそれに相当するもの:

WHERE email = 'email1@foo.com'
   OR email = 'email2@bar.com'
于 2009-10-26T02:23:15.497 に答える
2

あなたの声明には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';
于 2009-10-26T02:21:58.813 に答える