MySQL事务查询帮助

MySQL事务查询帮助,sql,mysql,transactions,syntax-error,mysql-error-1064,Sql,Mysql,Transactions,Syntax Error,Mysql Error 1064,这个问题困扰着我: 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 corre

这个问题困扰着我:

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

您的声明有两个问题:

  • 您没有选择要插入的电子邮件(仅id)
  • 在子句中使用“=”而不是
  • 应该是这样的:

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

    更新(基于评论)


    我可以看到您至少有两个错误:

  • 您正在尝试插入两列数据(
    user\u id
    email
    ),但仅从
    插入的后半部分中选择一列(
    user\u id
    )。。。选择
    。您必须选择与尝试插入的列数相同的列数,并按顺序排列
  • SELECT
    的谓词中有语法错误。我想你应该使用:

    电子邮件在哪里('email1@foo.com', 'email2@bar.com)

  • 或其等效物:

    WHERE email = 'email1@foo.com'
       OR email = 'email2@bar.com'
    

    但是,如果我要插入的第二个值不是来自select。那我该怎么办?我只需要用户表中的用户id。@Chad,你可以做
    插入子用户(用户id,电子邮件)选择用户id,从中选择“某些常量”。
    'some constant'
    也可以是您从中选择的表中的函数或其他字段。不,电子邮件不会来自任何表,而是来自PHP变量。我已在此处重新发布:我要插入的电子邮件位于我从中选择的表中。您从
    用户中选择。上述查询将从
    用户
    中选择其
    电子邮件
    字段为的所有记录'someemail@email.com“或者”test@email.com'并将这些记录插入
    子用户
    。如果您想做其他事情,请澄清您的问题好的,我想用电子邮件获取用户的用户名someemail@email.com,然后将其与新电子邮件一起插入sub_users表(test@email.com). 所以test@email.com将来自一个php变量,而不是数据库。我明白了。您需要在select子句中将新电子邮件指定为常量值(或要绑定的参数)。我已经用一个样本更新了上面的答案。test@email.com不应该来自任何mysql表。它将由用户定义,因此它将是PHP变量。我可能不得不开始一篇新的文章,因为这篇文章似乎让每个人都感到困惑。我只想从users表中选择一个值,然后将该值和用户定义的$email值插入sub_users表中;请仔细阅读回复。
    WHERE email = 'email1@foo.com'
       OR email = 'email2@bar.com'