是否可以在一个查询中插入一行到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插入到monthly_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级别执行此操作,而不是通过更高级别的工具。谢谢。
演示更新:
(问题内容保持不变)
答案 0 :(得分:2)
您的查询无效,因为您没有正确使用括号。使用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
关键字。