查询粘贴在下面。基本上我有一个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));
答案 0 :(得分:1)
我认为您的问题是,您尝试将SELECT
与VALUES
混合(用于输入文字值)。
尝试:
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