mysql插入查询无法正常工作

时间:2015-06-29 23:10:10

标签: mysql sql ruby-on-rails activerecord

查询粘贴在下面。基本上我有一个users表,我想为controls表中users表中的每个条目创建1条记录。当我插入控件表时,我需要users表中的user_id。我尝试运行下面的查询时出现语法错误。我看了一堆其他MySQL例子做了类似的事情,但得到了同样的错误。我正在运行MySQL 5.6.21。

这最终将成为Rails迁移,因此我也可以使用ActiveRecord,但还没有真正弄清楚如何使用它做这样的事情。

INSERT into controls (default, whitelist, user_id, admin_status, system_status, created_at, updated_at) values (0, 0, (SELECT id FROM users), 'inactive', 'sleeping', DATE(NOW), DATE(NOW));

2 个答案:

答案 0 :(得分:1)

我认为您的问题是,您尝试将SELECTVALUES混合(用于输入文字值)。

尝试:

INSERT into controls
    (`default`, whitelist, user_id, admin_status, system_status, created_at, updated_at)
    SELECT 0, 0, id, 'inactive', 'sleeping', NOW(), NOW() FROM users;

答案 1 :(得分:1)

DEFAULT是MySQL保留字。您可能需要将该列名称括在反引号中。

INSERT into controls (`default`, whitelist, 
                      ^       ^

这些是反引号字符( 1 /! 键左侧的键),而不是单引号。

来自MySQL的错误消息应该指出MySQL认为问题所在的SQL文本中的位置。

如果这是一个新表,请强烈考虑使用 MySQL保留字的列名。

参考:https://dev.mysql.com/doc/refman/5.5/en/keywords.html

VALUES子句上下文中的SELECT最多需要返回一个行。您需要确保SELECT不会返回多行,例如添加LIMIT 1子句。但

再次阅读您的问题...如果您想在新controls表格中为用户表格中的每一行插入一行,请不要使用VALUES关键字。使用INSERT语句的INSERT ... SELECT形式。

参考:http://dev.mysql.com/doc/refman/5.5/en/insert-select.html