Вставить строку в таблицу MySQL из запроса в одно поле, а функция SQL вернула значения в другие поля
Возможно ли в одном запросе вставить строку в таблицу MYSQL, а также значения, возвращаемые из функции MySQL в других полях?
Например, у меня есть следующая таблица:
CREATE TABLE monthly_hours
(
ProjectID int,
Year int,
Month int,
monthTotalTime int
);
- который показывает время, затраченное на проект за данный месяц в данном году.
И у меня есть запрос, который суммирует общее время, потраченное на проект:
INSERT INTO time_monthly_hours ( `ProjectID`, `monthTotalTime` )
SELECT jiraissue.PROJECT, SUM(worklog.timeworked)
FROM worklog, jiraissue
WHERE worklog.issueid = jiraissue.ID
AND jiraissue.PROJECT = 13262
AND worklog.startdate BETWEEN '2017-01-01 00:00:00' AND '2017-01-18 23:59:59';
И я хочу вставить идентификатор projectID и monthTotalTime в строку в таблице month_hours, с месяцем и годом.
Я пробовал:
INSERT INTO time_monthly_hours ( ProjectID, monthTotalTime, Year, Month ) VALUES
(
SELECT jiraissue.PROJECT, SUM(worklog.timeworked)
FROM worklog, jiraissue
WHERE worklog.issueid = jiraissue.ID
AND jiraissue.PROJECT = 13262
AND worklog.startdate BETWEEN '2017-01-01 00:00:00' AND '2017-01-18 23:59:59'
),
MONTH(CURRENT_DATE()), YEAR(CURRENT_YEAR() );
Но это был неверный запрос. Я искал довольно много, но не могу найти такое решение, чтобы одновременно добавить как результат SQL-запроса, так и значения из функции SQL в строку.
Пожалуйста, вы можете посоветовать. Мне нужно сделать это на уровне MySQL, а не с помощью инструментов более высокого уровня. Спасибо.
презентационное обновление:
(содержимое вопроса остается тем же)
- Я попытался улучшить форматирование, чтобы быть более читаемым по запросу BeNice
- Я немного исправил грамматику в заголовке (необходимо использовать множественное число для полей), а также запрос "запрос" в первой строке вопроса был исправлен для запроса. Спасибо!
Ответы
Ответ 1
Ваш запрос неверен, потому что вы не использовали круглые скобки правильно. Когда вы используете INSERT...VALUES()
, синтаксис должен быть:
INSERT INTO <table> (col, col, col, col) VALUES (val, val, val, val);
Но у вас по существу был недопустимый синтаксис, например:
INSERT INTO <table> (col, col, col, col) VALUES (val, val), val, val;
Есть еще одна проблема с использованием одного подзапроса, который возвращает два столбца. Это не может использоваться вместо скалярного значения для оператора INSERT.
Кроме того, вы сопоставили свое выражение MONTH() с столбцом Year и выражением YEAR() в столбце Month.
Но это проще, чем вы это делаете. Вы можете поместить константные выражения в SELECT, поэтому SELECT имеет четыре столбца.
INSERT INTO time_monthly_hours ( ProjectID, monthTotalTime, Year, Month )
SELECT jiraissue.PROJECT, SUM(worklog.timeworked),
YEAR(CURRENT_DATE()), MONTH(CURRENT_DATE())
FROM worklog, jiraissue
WHERE worklog.issueid = jiraissue.ID
AND jiraissue.PROJECT = 13262
AND worklog.startdate BETWEEN '2017-01-01 00:00:00' AND '2017-01-18 23:59:59'
Когда вы используете INSERT...SELECT
, вам не нужно ключевое слово VALUES
.