是否可以在一个查询中向 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';
我想将项目ID 和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 级别执行此操作,而不是通过更高级别的工具。谢谢。
演示更新:
(问题内容不变)
- 根据 BeNice 的要求,我尝试增强格式以使其更具可读性
- 我稍微更正了标题中的语法(需要使用复数字段),问题第一行中的“queryto”也被更正为“query to”。谢谢!
最佳答案
您的查询无效,因为您没有正确使用括号。当您使用 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
关键字。
关于mysql - 将查询结果插入到 MySQL 表中的一个字段中,并将 SQL 函数返回的值插入到其他字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41767517/