MySQL вставить один раз для каждого результата подзапроса - PullRequest
1 голос
/ 30 сентября 2011

Я хочу выполнить запрос MYSQL:

INSERT INTO taskattempts (taskID) VALUES (_);

, который я хочу выполнить несколько раз, по одному разу для каждого результата запроса:

SELECT id FROM tasks WHERE stageID = 1;

использование результирующего идентификатора из второго запроса в качестве значения taskID в первом.

Есть ли способ сделать это с помощью одного запроса MySQL? Цикл PHP, выполняющий несколько запросов, кажется ужасно неэффективным.

* РЕДАКТИРОВАТЬ *

Мне действительно нужно заполнить несколько столбцов, два статических и один подзапросом. Я обнаружил, что INSERT INTO taskattempts (stageAttemptID, taskID, complete) SELECT 0, id, 5 ОТ задач WHERE stageID = 5; работает, но интересно, является ли это кошерным. Кроме того, в интересах знаний, можете ли вы заполнить разные столбцы разными запросами?

1 Ответ

2 голосов
/ 30 сентября 2011
 INSERT INTO taskattempts (taskID) SELECT id FROM tasks WHERE stageID = 1;

(Это общепринятый стандарт SQL).

В ответ на вторую часть вопроса вы можете свободно смешивать константы и столбцы в предложении SELECT:

 INSERT INTO taskattempts (stateAttemptID, taskID, complete) 
    SELECT 0, id, 5 FROM tasks WHERE stageID = 1;

Если ваши константы являются строками, не забудьте процитировать их. И помните, вы можете включить сложный оператор SELECT с JOIN s и агрегацию, если требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...