2009-10-26 72 views
-2

这个问题我莫名其妙:MySQL的交易查询帮助

BEGIN; 
INSERT INTO sub_users(user_id, email) 
SELECT user_id FROM users WHERE email='[email protected]', '$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 ' '[email protected]'' at line 1 

我使用的MySQL版本5.1.36

+0

我可能要开始一个新的职位,因为这一个似乎是混乱的每一个人。我只想从用户表中选择一个值,然后将$ email的用户定义值插入到表sub_users中。 – Chad 2009-10-26 03:03:27

+0

不需要新帖子;请仔细阅读答复。 – ChssPly76 2009-10-26 03:11:04

回答

2

两个问题你的说法:

  1. 你不选择电子邮件插入(仅限ID)
  2. 您使用'='而不是IN条款。

应该是这样的:

INSERT INTO sub_users(user_id, email) 
SELECT user_id, email FROM users 
    WHERE email IN ('[email protected]', '[email protected]'); 

代替。

更新(基于评论)

INSERT INTO sub_users(user_id, email) 
SELECT user_id, '[email protected]' FROM users 
    WHERE email = '[email protected]'; 
+0

我想插入的电子邮件位于我正在选择的表格中。 – Chad 2009-10-26 02:27:28

+0

您正在从'用户'中选择。上述查询将选择'email'字段为'[email protected]'或'[email protected]'的'users'中的所有记录,并将这些记录插入到'sub_users'中。如果你想做别的事情,请澄清你的问题 – ChssPly76 2009-10-26 02:30:57

+0

好的,我想用电子邮件[email protected]取得用户的user_id,然后将其插入到sub_users表中,并附上一封新邮件([email protected] )。所以[email protected]将来自一个PHP变量,而不是数据库。 – Chad 2009-10-26 02:34:11

2

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

  1. 您正在试图插入值数据(user_idemail的两列),但仅从INSERT INTO ... SELECT的后半部分中选择一列(user_id)。您必须在尝试插入时选择相同数量的列,然后排序。
  2. 您在SELECT的谓词中有语法错误。我想你想使用:

    WHERE email IN ('[email protected]', '[email protected]')

或等值:

WHERE email = '[email protected]' 
    OR email = '[email protected]' 
+0

但是如果我想插入的第二个值不是来自select。那我该怎么做? – Chad 2009-10-26 02:26:18

+0

我只需要用户表中的user_id。 – Chad 2009-10-26 02:29:04

+0

@Chad,你可以做'INSERT INTO sub_users(user_id,email)SELECT user_id,'一些常量'FROM ...'。 ''一些常量'也可以是一个函数或从你选择的表中的另一个字段。 – dcrosta 2009-10-26 02:46:51