2015-06-29 3 views
0

Запрос вставляется ниже. В основном у меня есть таблица пользователей, и я хочу создать 1 запись для каждой записи в таблице users в таблице элементов управления. Мне нужно user_id из таблицы users, когда я вставляю в таблицу элементов управления. Я получаю синтаксическую ошибку, когда я пытаюсь выполнить запрос ниже. Я посмотрел на кучу других примеров MySQL, которые делают что-то подобное, но получают ту же ошибку. Я использую MySQL 5.6.21.mysql вставить в запрос не работает

Это приведет к миграции 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

DEFAULT - это зарезервированное слово в MySQL. Сообщение об ошибке было бы ключом. Кроме того, вы не можете использовать SELECT таким образом. См. Синтаксис INSERT ... SELECT. – Strawberry

ответ

1

Я считаю, что ваша проблема в том, что вы пытаетесь смешать SELECT с VALUES (который используется для ввода значений литералов).

Try:

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

DEFAULT является MySQL зарезервированное слово. Возможно, вам придется заключить это имя столбца в обратные ссылки.

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

Те кавычкой символов (ключ слева от ключа 1 /!), А не одиночные кавычки.

Сообщение об ошибке от MySQL должно указывать, где в тексте SQL MySQL думает, что проблема.

Если это новая таблица, настоятельно рекомендуем использовать имя столбца, которое равно , а не зарезервированное слово MySQL.

Ссылка: https://dev.mysql.com/doc/refman/5.5/en/keywords.html


SELECT в контексте пункта VALUES должен возвращать не более один подряд. Вам нужно будет убедиться, что SELECT не возвращает более одной строки, например. добавьте предложение LIMIT 1. Но

Повторный просмотр вашего вопроса ... если вы хотите вставить строку в новую таблицу controls для каждой строки, находящейся в таблице пользователей, не используйте ключевое слово VALUES. Используйте форму оператора INSERT ... SELECT инструкции INSERT.

Код: http://dev.mysql.com/doc/refman/5.5/en/insert-select.html