как вставить в таблицу, зависящую от другой таблицы

#mysql

#mysql

Вопрос:

У меня есть две таблицы, одна из которых вызывает пользователей, а другая называется todolist. В моем веб-приложении у меня есть функция администратора, которую я хотел бы, чтобы администратор мог назначить для выполнения всем пользователям. Я пытаюсь написать SQL, но, похоже, я просто нажимаю на блок writiers или я просто тупой.

Итак, как я могу выбрать всех пользователей из таблицы users, а затем выполнить вставку в таблицу todo, чтобы в основном таблица todo заканчивалась каждым пользователем и задачей?

Комментарии:

1. Возможно — ВСТАВИТЬ В TODO(ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ, ЗАДАЧА) SELECT (ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ, ‘SomeTask’) ОТ ПОЛЬЗОВАТЕЛЕЙ

2. очень полезно, но что, если бы я хотел выбрать максимальный идентификатор в списке задач перед фактической вставкой? я продолжаю получать сообщение об ошибке, если я пытаюсь это сделать. ‘ВСТАВИТЬ В todo (field1, field2, field3, …) ВЫБЕРИТЕ max (somfield) somefield1, somefield2, somefield3, … ОТ пользователей, задача ‘

3. Это было бы ошибкой — Max (somefield) может дать двум пользователям одинаковый результат, если они попытаются выполнить операцию одновременно. Было бы лучше, если бы вы использовали последовательность, которая гарантированно уникальна.

Ответ №1:

Существует INSERT ... SELECT FROM :

 INSERT INTO todo (field1, field2, field3, ...)
SELECT somefield1, somefield2, somefield3, ...
FROM users
WHERE ...
  

Комментарии:

1. спасибо, Марк Б, еще один вопрос. Что, если я хочу выбрать максимальное значение из таблицы, которую я собираюсь вставить, и иметь это как часть моей вставки, как бы я мог сделать что-то подобное? другими словами INSERT INTO todo (field1, field2, field3, ...) SELECT max(somfield) somefield1, somefield2, somefield3, ... FROM users,todo WHERE ... это правильно, мне кажется, что это не удается.

2. использование агрегатной функции (например, max) вместе с другими неагрегированными полями требует использования group by предложения.