MySQLトランザクションクエリヘルプ
-
06-07-2019 - |
質問
この問題は私を困惑させます:
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つの問題:
- 挿入するメールを選択していません(IDのみ)
- 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つあります:
- 2列分のデータ(
user_id
およびemail
)を挿入しようとしていますが、2列目から1列(user_id
)のみを選択していますINSERT INTO ... SELECT
の半分。挿入しようとしている列と同じ数の列を選択し、順序を決める必要があります。 -
SELECT
の述語に構文エラーがあります。使用したいと思う:WHERE email IN( 'email1@foo.com'、 'email2@bar.com')
または同等のもの:
WHERE email = 'email1@foo.com'
OR email = 'email2@bar.com'
所属していません StackOverflow